Meebo 和 GMail + Talk 等 WebIM 的实现方式
2006-10-22 15:35 Cat Chen 阅读(2264) 评论(5) 编辑 收藏 举报我用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个端口,幸运的话我想最多能够同时使用几百个,超过了网卡的缓冲区应该就负载不了了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构