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

     

     

     


         

  • 相关阅读:
    Parcel与Parcelable剖析
    Binder文集
    Charles 使用教程
    AsyncTask
    Android 编译时注解
    scanf(),gets(),getchar()
    银行家算法
    最长公共子序列(LCS)问题
    动态规划 求解数字三角形最大值
    参数 存在二维数组
  • 原文地址:https://www.cnblogs.com/nevermad/p/1754593.html
Copyright © 2011-2022 走看看