基于ASP.NET的comet简单实现
前天看到一篇博文《一步一步打造自己的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
基于ASP.NET的comet简单实现相关推荐
- 基于 Asp.Net的 Comet 技术解析
Comet技术原理 来自维基百科:Comet是一种用于web的技术,能使服务器能实时地将更新的信息传送到客户端,而无须客户端发出请求,目前有两种实现方式,长轮询和iframe流. 简单的说是一种基于现 ...
- 基于Asp.Net Core的简单社区项目源代码开源
2019年3月27号 更新版本 本项目基于 ASP.NET CORE 3.0+EF CORE 3.0开发 使用vs2019 +sqlserver 2017(数据库脚本最低支持sql server 20 ...
- 动态网页大作业 - 简单易懂【附源码分享】- 基于ASP、Ajax技术
这是突击一个星期的菜鸡作业,提供给大家进行分享学习,是基于ASP.VBScript的旅客主题动态网站,有登录注册.在线留言功能,连接了本地数据库,需要配置好IIS环境,然后把文件夹放到IIS文件夹中, ...
- 看一下基于ASP.NET MVC的开源社区项目Orchard
昨天介绍了基于ASP.NET MVC的框架Catharsis,今天给大家介绍的是基于ASP.NET MVC的一个开源社区项目Orchard,本篇主要介绍一下Orchard是什么,如何下载安装以及安装过 ...
- 基于asp.net + easyui框架,一步步学习easyui-datagrid——界面(一)
从这篇博客,我会一步步的为大家讲解,easyui框架中最常用的一个控件datagrid.在使用easyui框架时,datagrid是使用最多的控件,它不仅好用,关键是实用. 我为大家建立一个博客更新的 ...
- 基于ASP.NET Core SignalR的流式传输
基于ASP.NET Core SignalR的流式传输 SignalR概述 SignalR是ASP.NET Core下非常流行的实现Web实时功能的库.微软再文档中列出了适合的应用场景: 适合 Sig ...
- .NET Conf 2020 - 基于ASP.NET Core构建可热插拔的插件化系统
文章标题:.NET Conf 2020 - 基于ASP.NET Core构建可热插拔的插件化系统 作者:Lamond Lu 项目地址:https://github.com/lamondlu/CoolC ...
- 基于ASP.NET Core的模块化设计: 虚拟文件系统
土牛亲自录制的本文介绍视频 Abp中文网(https://cn.abp.io/)提供翻译字幕 基于ASP.NET Core的模块化设计: 虚拟文件系统 简介 创建模块化的应用程序很困难. 构建模块化的 ...
- 基于Asp.Net Core打造轻量级内部服务治理RPC(二 远程服务设计)
紧接上一篇<基于Asp.Net Core打造轻量级内部服务治理RPC(一)>文章.本文主要讲解基于Asp.Net Core的远程服务设计和实现. 在上一篇中讲过,服务提供者提供的服务实际上 ...
最新文章
- 结合深度学习的图像修复怎么实现?
- Elasticsearch官档翻译——2 2 在Linux上启动服务
- linux下基本命令
- python配置核_浅谈pytorch卷积核大小的设置对全连接神经元的影响
- java并行体系结构
- #define const typedef
- HDU2896(病毒侵袭--AC自动机)
- centos升级gcc
- c++面向对象高级编程 学习十三 数量不定的模板参数,auto,for
- python中lowerright_python字符串,从入门到高阶看这篇就够了
- javascript 总结(常用工具类的封装)(转)
- 团队梯队人才培养模型,60页人才梯队建设与人才培养,果断收藏
- hihoCoder 1378 网络流二·最大流最小割定理 (网络流学习#2 记录)
- 大数据有哪些基本特征
- 300多分学计算机去哪个学校,300分能上什么大学 2021年300分左右的学校
- Java+spring+springmvc 基于ssm的银行排队叫号系统#毕业设计
- 自建邮箱系统邮件管理方法
- cron表达式每隔1小时一次_cron 每隔1小时50分钟_cron每小时执行一次
- 色彩三原色,RGB,CMYK
- ireport 使用list数据源
热门文章
- OpenGL 分层渲染Layered Rendering的实例
- C++八皇后拼图,打印所有的算法(附完整源码)
- c++类与类的关联(Association)关系
- 经典C语言程序100例之九五
- C++11-long long
- 4后期盒子叫什么_Carlife转Carplay盒子科普
- 03_Flink本地安装、分别解压scala和Flink、配置环境变量、启动集群、提交一个job、停止集群
- CAS_SSO单点登录实例详细步骤(转)、Tomcat ssl(https) 配置
- 编程语言之类型之间转换
- Light-Head R-CNN相关资料