`
lovnet
  • 浏览: 6870779 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

基于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

允许转载,麻烦注明出处:http://www.cnblogs.com/hanxianlong
分享到:
评论

相关推荐

    asp.net comet例子

    标题"asp.net comet例子"指的是一个展示如何在ASP.NET环境中实现Comet技术的实际示例。这个例子可能包含了一个服务端页面(Service.aspx和服务.aspx.cs),以及一个客户端的HTML页面(ajax.html)。服务端页面处理与...

    ASP.NET的Comet即时通讯 源码

    在给定的"ASP.NET的Comet即时通讯 源码"中,我们可以看到它基于ASP.NET框架,这是一个由微软开发的用于构建动态网站、Web应用程序和Web服务的强大平台。ASP.NET提供了丰富的功能和工具,使得开发者能够更高效地编写...

    asp.net+ajax实现无刷新聊天室

    首先,ASP.NET是由微软开发的一种用于构建动态Web应用程序的框架,它基于.NET Framework,提供了丰富的服务器控件、内置的安全性和易于管理的结构。在ASP.NET中,我们可以通过C#或VB.NET等编程语言编写后端逻辑。 ...

    asp.net comet

    ASP.NET Comet 技术是一种用于实现服务器向客户端实时推送数据的技术。在传统的HTTP协议中,服务器与客户端的通信是基于请求-响应模型的,即客户端发起请求,服务器响应后连接关闭。然而,对于需要实时更新的应用...

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

    二、基于ASP.NET和jQuery的Comet实现 其实jQuery只是一个手段,这里用到它的Ajax部分,用于向服务器端发送请求。在我的源码中,就是用于负责向服务器端发送两个请求:1、发送数据 2、发送等待请求(当服务器有数据时...

    asp.net基于http的长连接项目

    在ASP.NET中实现基于HTTP的长连接,通常涉及到一种名为“Comet”或“Reverse AJAX”的技术。这种技术允许服务器向客户端推送数据,而无需客户端不断地发起新的HTTP请求,从而实现了类似于即时通讯(IM)系统的实时...

    基于CometByASP.NET全站广播_聊天室代码

    【标题】"基于CometByASP.NET全站广播_聊天室代码"是一个示例项目,展示了如何在ASP.NET环境中实现全站广播功能,通常用于构建实时的聊天室应用。Comet技术是一种处理服务器推送(Server-Sent Events)的策略,它...

    asp.net 长连接(聊天室例子)

    在这个"Comet_by_ASP.NET"示例中,我们将会看到如何使用ASP.NET来实现一个聊天室功能,该功能利用了长连接技术。主要涉及以下知识点: 1. **HTTP长连接**:HTTP 1.1默认支持长连接,通过设置`Connection: keep-...

    webQQ(ext+asp.net)

    【标题】"WebQQ(ext+asp.net)"是一个基于Ext JavaScript库和ASP.NET技术实现的Web版QQ客户端模拟项目。这个项目结合了强大的前端框架Ext JS和后端的ASP.NET平台,为用户提供了一种无需安装桌面应用程序即可在浏览器...

    asp.net 消息推送

    在ASP.NET框架下,实现消息推送主要有两种方式: comet技术和WebSocket。Comet技术是一种模拟双向通信的技术,通常通过长时间HTTP连接(Long Polling)或使用IFrame、XMLHttpRequest来实现。尽管这种方法在某些情况...

    asp.net 长连接的聊天室(多人房间)

    ASP.NET长连接的聊天室是一种实现高实时性的在线交流平台,尤其适合于多人参与的讨论环境。这种聊天室的核心技术是Comet,一种用于创建服务器推送(Server-Sent Events)的编程模型,允许服务器主动向客户端发送数据...

    ajax asp.net QQ源码

    在ASP.NET中,可以利用SignalR库实现类似的功能,它提供了简单的API来处理实时双向通信。 4. **数据交换格式** 虽然名字中含有XML,但现代的AJAX应用更倾向于使用JSON(JavaScript Object Notation)作为数据交换...

    asp.net实现仿QQMsn弹出即时消息

    在这个特定的项目中,“asp.net实现仿QQMsn弹出即时消息”旨在利用ASP.NET的技术来创建一个类似QQ和MSN的即时消息系统,提供无刷新的用户体验。 1. **即时消息系统基础**:即时消息系统允许用户实时发送和接收文本...

    AspNetComet.zip

    AspNet Comet 是一种基于 ASP.NET 的技术,用于实现服务器向客户端实时推送数据的机制。这种技术主要解决了传统的HTTP协议中客户端发起请求,服务器响应的模式不能满足实时性需求的问题。在 ASP.NET Comet 中,...

    基于Comet推送技术的实时图形控件

    本篇文章将详细探讨基于Comet推送技术实现的asp.net实时图形控件及其特点。 首先,我们需要理解Comet技术。Comet是一种Web通信模式,它打破了传统的HTTP请求-响应模型,允许服务器向客户端主动推送数据,而不是等待...

    asp网页聊天室,比较简单

    在本案例中,"asp网页聊天室,比较简单"是一个基于ASP技术实现的基础版在线聊天室,适合初学者学习和理解ASP的基本原理以及如何实现简单的交互功能。 聊天室的核心功能包括用户之间的实时交流,即发送和接收消息。...

    CSharp HTTP长连接(Comet)

    服务器端通常使用ASP.NET MVC或ASP.NET Core来处理Comet请求。在Controller中,你可以创建一个Action来保持打开的响应,并在需要时写入数据: ```csharp [HttpGet] public async Task<IActionResult> Comet() { ...

    基于ASP的菠萝直播吧.zip

    在"基于ASP的菠萝直播吧"项目中,我们可以推测这可能是一个在线直播平台的后端实现,开发者可能使用ASP技术来处理用户的请求,如登录注册、直播间访问、视频流传输等。ASP脚本可能会处理以下关键功能: - **用户...

    基于ASP的网络聊天室系统(源代码+项目报告).zip

    综上所述,"基于ASP的网络聊天室系统"项目涵盖了ASP技术基础、实时通信实现、用户管理和安全性等多个方面,是学习和实践ASP技术的好案例。通过阅读源代码和项目报告,我们可以深入理解ASP在实际项目中的应用,以及...

    聊天室(.Net2003)

    在这个项目中,开发者可能使用了ASP.NET来创建服务器端的聊天服务,ASP.NET是.NET Framework的一部分,它允许开发人员创建动态网页和Web应用程序。客户端可能使用HTML、CSS和JavaScript来构建用户界面,通过AJAX...

Global site tag (gtag.js) - Google Analytics