开发分布式WebIm--4(模型细节)

本文介绍了一个简单的Comet模型实现方式,使用两个连接处理消息接收与发送,并通过内存中的全局哈希表实现消息分发。文章详细解释了如何利用IHttpAsyncHandler接口及BeginProcessRequest方法实现这一过程。

第三节我写了有一段时间了,回过头来看发现太粗略,连我自己也不知道在说些什么,所以我决定用图片的形式来把这个模型再阐述一下,愿和更多的朋友来交流。

我设计的Comet模型是很简单的,看下图

简单吧,重点就是采用两个连接,一个长期保持用于接受消息,一个发送消息后立刻关闭。

那么服务器端是如何把消息分发到不同用户的呢?请看下图

全靠内存中保存的这张全局哈希表,通过这张表可以把消息实时的写入用户客户端,那这个HttpContext怎么来的呢?一定有朋友会问。那我告诉你这是微软提供的一个IHttpAsyncHandler接口实现的, IHttpAsyncHandler有个方法需要重载   public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData),通过

context.Request 可以得到Get或者Post的数据,数据中你写上用户名,然后用Hashtable.add(用户名,HttpContext)就行了,AsyncCallback cb是异步结束后给系统发通知的回调。ok有了BeginProcessRequest这把利器,Comet就这么简单的实现了。

   题外话:IIS是提供传统Web服务的,虽然对Comet提供了一定的支持,但还存在很多问题,最大的问题就是IIS指不定什么时候就自动重启了,然后进程中所有的数据都丢失了。一般的Web应用没什么,可能都没感觉。但是所有的Comet都掉线了就有点麻烦了,所以客户端要做的强一点才能弥补这个缺陷。

 

 

 


     

转载于:https://www.cnblogs.com/nevermad/archive/2010/06/09/1754593.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值