ASP.NET实现comet的聊天交互功能

时间:2013-07-31 12:00:50
【文件属性】:

文件名称:ASP.NET实现comet的聊天交互功能

文件大小:115KB

文件格式:RAR

更新时间:2013-07-31 12:00:50

asp.net实现comet,comet版聊天室

说明 : 一、概念 借用横刀天笑的解释这个Comet概念:“像彗星那样拖着长长的尾巴的http长连接”。事实上大家都知道,http是不可以与服务器持久连接的,要是每个请求都与服务器持久连接的话,那服务器早就宕掉了,就像前段时间像博客园连接数超过2000就出来了Service Unavailable一样。。 就像网上的解释: step 1.向服务器发出请求 step 2.服务器端查看是否有数据 step 3.如果有数据,则向客户端发送数据,结束该请求,返回Step1 step 4.如果没有数据,等待,直到有数据出现,进入step 3 通过以上几步可以看出,客户端与服务器是始终维持着一个连接的,这样看起来,就像客户端与服务器端始终有一个没有关闭的连接一样。也就是他们说的"HTTP长连接". 二、基于ASP.NET和jQuery的Comet实现 其实jQuery只是一个手段,这里用到它的Ajax部分,用于向服务器端发送请求。在我的源码中,就是用于负责向服务器端发送两个请求:1、发送数据 2、发送等待请求(当服务器有数据时该请求会返回后再次发送) 至于服务器端,如何实现判断服务器有数据便返回,没有数据便等待的功能呢?Google一下,可以知道ASP.NET实现异步处理的话,实现IHttpAsyncHandler接口就可以了。该接口的BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)方法返回一个IAsyncResult对象。当不调用其参数cb的回调函数时,该请求不会结束。 故我们可以在该方法中做一下文章,用一个单例模式实现的消息处理类Messages将所有请求的IAsyncResult对象保存起来,这样便可以知道有多少个客户端发送了请求,同时也可以遍历所有的IAsyncResult对象,实现向其客户端主动发送数据的功能。 上面说了,jQuery会发送两个请求,第二个就是一个“等待请求”,当服务器端主动发送了数据到客户端时,该请求便能够收到服务器发送的数据。这样便完成了一次服务器向客户端主动发送数据。再次建立等待请求,重复循环,实现“长连接”。


【文件预览】:
Comet_by_ASP.NET
----App_Code()
--------AsnyHandler.cs(2KB)
--------Messages.cs(1KB)
----Scripts()
--------jquery-1.3.2.js(134KB)
--------jquery-1.3.2.min.js(68KB)
--------jquery-1.3.2-vsdoc.js(205KB)
--------myJS.js(946B)
----Web.config(231B)
----App_Data()
----Default.aspx(770B)

网友评论

  • 还是不错的 可用实现通信
  • 点击“广播”后,没有反应,请楼主解释,谢谢~
  • 很基本的代码, 可以借鉴.
  • 很基本的代码, 可以借鉴.
  • 有点简单了 不过很有帮助
  • 还是不错的 可用实现通信
  • 配置到IIS后报错~
  • 太简单了,刚看了看,但是也很感谢了
  • 点击“广播”后,没有反应,请楼主解释,谢谢~
  • 运行起来了,没有错误,代码正在研究中,很有帮助
  • 谢谢,帮助很大。 to zhaoyizou:用iis7就没有连接数限制。
  • 非常好.的东东.在xp IIS中连接数总是超出.不知道有什么办法解决没有.对性能影响大不大.也不知道