zoukankan      html  css  js  c++  java
  • 开发分布式WebIm4(模型细节)

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

    我设计的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都掉线了就有点麻烦了,所以客户端要做的强一点才能弥补这个缺陷。

     

     

     


         

  • 相关阅读:
    ASP程序调用验证码
    fcex pf.conf
    高速INTERNET代理服务器解决方案
    《IIS 6的几个经典问答》
    一个符合WEB标准的横向下拉菜单
    FREEBSD+PF 在6.2上的架设
    权限
    FreeBSD+IPFILTER实现整网(N个Vlan)透明代理上网
    pf 带宽控制 例子
    FreeBSD下配置DHCP服务小结
  • 原文地址:https://www.cnblogs.com/nevermad/p/1754593.html
Copyright © 2011-2022 走看看