前天看到一篇博文《一步一步打造自己的WEBIM》,觉得COMET这个概念很有意思,但博主使用了自己的一套较为复杂的框架,看起来颇为费劲,故而我想通过简单的“jQuery+两个类”来实现一个简单的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会发送两个请求,第二个就是一个“等待请求”,当服务器端主动发送了数据到客户端时,该请求便能够收到服务器发送的数据。这样便完成了一次服务器向客户端主动发送数据。再次建立等待请求,重复循环,实现“长连接”。

三、源码

我本地没有画图工具,不能将以上流程用流程图很好表示出来,请海涵。代码也很简单,就是一个简单地不能再简单的实现,有兴趣的下载下来看看:

/Files/hanxianlong/Comet_by_ASP.NET.rar

允许转载,麻烦注明出处:http://www.cnblogs.com/hanxianlong

基于ASP.NET的comet简单实现相关推荐

  1. 基于 Asp.Net的 Comet 技术解析

    Comet技术原理 来自维基百科:Comet是一种用于web的技术,能使服务器能实时地将更新的信息传送到客户端,而无须客户端发出请求,目前有两种实现方式,长轮询和iframe流. 简单的说是一种基于现 ...

  2. 基于Asp.Net Core的简单社区项目源代码开源

    2019年3月27号 更新版本 本项目基于 ASP.NET CORE 3.0+EF CORE 3.0开发 使用vs2019 +sqlserver 2017(数据库脚本最低支持sql server 20 ...

  3. 动态网页大作业 - 简单易懂【附源码分享】- 基于ASP、Ajax技术

    这是突击一个星期的菜鸡作业,提供给大家进行分享学习,是基于ASP.VBScript的旅客主题动态网站,有登录注册.在线留言功能,连接了本地数据库,需要配置好IIS环境,然后把文件夹放到IIS文件夹中, ...

  4. 看一下基于ASP.NET MVC的开源社区项目Orchard

    昨天介绍了基于ASP.NET MVC的框架Catharsis,今天给大家介绍的是基于ASP.NET MVC的一个开源社区项目Orchard,本篇主要介绍一下Orchard是什么,如何下载安装以及安装过 ...

  5. 基于asp.net + easyui框架,一步步学习easyui-datagrid——界面(一)

    从这篇博客,我会一步步的为大家讲解,easyui框架中最常用的一个控件datagrid.在使用easyui框架时,datagrid是使用最多的控件,它不仅好用,关键是实用. 我为大家建立一个博客更新的 ...

  6. 基于ASP.NET Core SignalR的流式传输

    基于ASP.NET Core SignalR的流式传输 SignalR概述 SignalR是ASP.NET Core下非常流行的实现Web实时功能的库.微软再文档中列出了适合的应用场景: 适合 Sig ...

  7. .NET Conf 2020 - 基于ASP.NET Core构建可热插拔的插件化系统

    文章标题:.NET Conf 2020 - 基于ASP.NET Core构建可热插拔的插件化系统 作者:Lamond Lu 项目地址:https://github.com/lamondlu/CoolC ...

  8. 基于ASP.NET Core的模块化设计: 虚拟文件系统

    土牛亲自录制的本文介绍视频 Abp中文网(https://cn.abp.io/)提供翻译字幕 基于ASP.NET Core的模块化设计: 虚拟文件系统 简介 创建模块化的应用程序很困难. 构建模块化的 ...

  9. 基于Asp.Net Core打造轻量级内部服务治理RPC(二 远程服务设计)

    紧接上一篇<基于Asp.Net Core打造轻量级内部服务治理RPC(一)>文章.本文主要讲解基于Asp.Net Core的远程服务设计和实现. 在上一篇中讲过,服务提供者提供的服务实际上 ...

最新文章

  1. 结合深度学习的图像修复怎么实现?
  2. Elasticsearch官档翻译——2 2 在Linux上启动服务
  3. linux下基本命令
  4. python配置核_浅谈pytorch卷积核大小的设置对全连接神经元的影响
  5. java并行体系结构
  6. #define const typedef
  7. HDU2896(病毒侵袭--AC自动机)
  8. centos升级gcc
  9. c++面向对象高级编程 学习十三 数量不定的模板参数,auto,for
  10. python中lowerright_python字符串,从入门到高阶看这篇就够了
  11. javascript 总结(常用工具类的封装)(转)
  12. 团队梯队人才培养模型,60页人才梯队建设与人才培养,果断收藏
  13. hihoCoder 1378 网络流二·最大流最小割定理 (网络流学习#2 记录)
  14. 大数据有哪些基本特征
  15. 300多分学计算机去哪个学校,300分能上什么大学 2021年300分左右的学校
  16. Java+spring+springmvc 基于ssm的银行排队叫号系统#毕业设计
  17. 自建邮箱系统邮件管理方法
  18. cron表达式每隔1小时一次_cron 每隔1小时50分钟_cron每小时执行一次
  19. 色彩三原色,RGB,CMYK
  20. ireport 使用list数据源

热门文章

  1. OpenGL 分层渲染Layered Rendering的实例
  2. C++八皇后拼图,打印所有的算法(附完整源码)
  3. c++类与类的关联(Association)关系
  4. 经典C语言程序100例之九五
  5. C++11-long long
  6. 4后期盒子叫什么_Carlife转Carplay盒子科普
  7. 03_Flink本地安装、分别解压scala和Flink、配置环境变量、启动集群、提交一个job、停止集群
  8. CAS_SSO单点登录实例详细步骤(转)、Tomcat ssl(https) 配置
  9. 编程语言之类型之间转换
  10. Light-Head R-CNN相关资料