posts - 138, comments - 1881, trackbacks - 97, articles - 13
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

Meebo 和 GMail + Talk 等 WebIM 的实现方式

Posted on 2006-10-22 15:35 Cat Chen 阅读(1217) 评论(5)  编辑 收藏 所属分类: AJAXWeb

我用Fiddler监听过Meebo和GMail + Talk,终于知道他们是如何实现event机制的了(也有人称之为Comet模式)。event包括好友发信息给你、好友上线/下线,甚至连是否显示某某人"is typing"的状态变换也算,反正就是指模仿桌面应用event机制需要服务器端主动触发客户端的东西。

例如有一个event.ashx是专门负责发送event消息的,那么工作的时候就保证一个客户端至少有一个活动的http连接在请求event.ashx。首先客户端要connect上去并发一个空的request请求event.ashx,然后服务器端则等待事件,如果在等待期间有事件发生则服务器端马上将事件信息写入response返回并disconnect掉,如果一段时间后没有事件发生则给出空的response并disconnect掉。客户端一旦收完response并被disconnect掉,马上进行下一次的connect和发送下一个空request以等待新的事件,如此重复下去。另外事件传输时可能也可以应用batch机制,也就是第一个事件触发后等几毫秒看看是否有紧随的事件,有的话也把其数据增加到response中一起发给客户端。

这样做的好处是,不会好像每秒一次请求检查事件那样非常消耗服务器端资源,但是占用着服务器的端口其实也是一种资源浪费。一台机65535个端口,幸运的话我想最多能够同时使用几百个,超过了网卡的缓冲区应该就负载不了了。

Feedback

#1楼   回复  引用  查看    

2006-11-06 15:51 by Ken      
能不能写个sample看看!

#2楼[楼主]   回复  引用  查看    

2006-11-06 21:36 by Cat Chen      
@Ken
不好意思,暂时我也找不到任何sample参考,仅能够看到Google和Meebo这样的专业公司做出来的服务,甚至是不是只有大公司的专业服务器才能承受得起这样的服务我也不确定。

我有想过长使用ASP.NET做一个小demo,但是一直没想好怎么做,所以就先放一边了。关键的问题是如果将消息缓存在服务器端(因为客户端总有断开的时刻),我不想用Application/Cache这样丑陋的机制。

#3楼   回复  引用    

2006-11-29 10:46 by bisou[未注册用户]
研究研究长链接

#4楼   回复  引用  查看    

2008-12-01 21:21 by 王国金      
楼主,你好,我现在也在研究这块。
你能写个简单的DEMO吗?我可以参考一下。谢谢了

#5楼[楼主]   回复  引用  查看    

2008-12-01 21:51 by Cat Chen      
@王国金
你可以看看我后来的帖子。



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 536454




相关文章:

相关链接: