`

Server-push技术(comet)----------asp.net中的异步处理+client与服务器端的长连接

阅读更多
server-push技术已经面世很久了,但直到GTALK的诞生才慢慢的引导出这项技术,不过到现在为止,也很少有人去应用这方面的技术,server-push倒底是一个什么样的东西呢?

故名思义,server-push即“服务器推”的意思,ajax大家都用过,它和server-push是完全相反的两个东西,ajax是从服务器端拉取数据,如果要定期更新页面上显示的数据块,那么最简单的方法就是写个计时器,server-push则不同,它的本质是将client与server建立一个长连接,即连上后不断开,一旦服务器端有新的数据就将其推送到客户端,讲到这里出现了几个问题。

1.ajax与server-push的区别与相同点分别是什么?

答:ajax与server-push的共同点是,它们同样使用javascript实现数据无刷新展示,区别在于,如果你使用ajax时时更新数据,那么无论服务器端数据有无变化,都会定期向服务器端取数据,这样便造成了一些不必要性能消耗,对服务器造成了一定的压力,而server-push则不同,它是在服务器端有新数据产生的时候才对客户端进行数据反馈,不过其缺点也产生于此,因为它会占用WEB服务器的连接数,用户访问量大且对连接数有一定限制的WEB服务器是不适用于server-push的。

2.服务器端如何发现有新数据?

答:这个问题需要根据具体应用环境来看,如果用于“即时通讯”工具的在线用户统计,服务器端发现有新用户登录,即向所有客户端推送数据,还有一种用得比较多的方式是在服务器端使用多线程来监控数据的更改。

3.服务器端如何往客户端推数据?

答:此问题是最关键的,服务器端怎么推送数据到客户端呢?.net中有个异步回调,使用它便可以实现服务器端往客户端数据的推送,.net中异步回调是怎么回事呢?其实很简单.

e.g. 写个类,假如专门用来实现异步回调,必须注意以下几点

1>继承IHttpAsyncHandler接口   //定义 HTTP 异步处理程序对象必须实现的协定。

2>以下几个方法不能少

 //启动对 HTTP 处理程序的异步调用。

    public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData) {}

    //进程结束时提供异步处理 End 方法。

    public void EndProcessRequest(IAsyncResult result){}

    //获取一个值,该值指示其他请求是否可以使用 IHttpHandler 实例。 (继承自 IHttpHandler。)

    public bool IsReusable{get { return false; ; }}

    //通过实现 IHttpHandler 接口的自定义 HttpHandler 启用 HTTP Web 请求的处理。 (继承自 IHttpHandler。)
    public void ProcessRequest(HttpContext context){throw new NotImplementedException();}

    //重点在这里,这里负责向客户端写数据   

    try
    {
      context.Response.Write(this.value);
          if (m_Callback != null)
          {
            m_Callback(this);//此处执行完毕,客户端ajax的请求便可获取到服务器端推送的数据了
           }
     }
     catch { }
     finally
     {
       m_IsCompleted = true;
     }

     上面方法中的this指的是另外一个类,此类继承接口IAsyncResult(//表示异步操作的状态)



终上所述,server-push需要客户端与服务器端建立一个长连接,这个长连接不能断,这样服务器端一旦有东西就会通过这个管道传到客户端,数据的push又需要使用到.net的异步回调。此处没有涉及到具体的代码编写,对于没有接触过.net异步回调的朋友来说看起来可能有点吃力,不过首先明白原理,然后再慢慢的去摸索技术。

分享到:
评论

相关推荐

    asp.net comet例子

    ASP.NET Comet是一个技术概念,它涉及到了Web应用程序中的实时通信,特别是服务器向客户端推送数据的能力。在传统的HTTP协议中,服务器通常在客户端发起请求时才响应,而在Comet模式下,服务器可以保持一个连接开放...

    Asp.net Comet(Web)技术

    在Asp.net框架中,实现Comet技术可以利用IIS的HTTP Keep-Alive特性,结合异步处理来支持长时间的连接。Asp.net的异步操作模型(如`async/await`关键字)使得开发者能够更轻松地处理这些长时间运行的请求,而不会阻塞...

    服务端推技术 - Server-side Push 多示例

    服务端推技术,也称为Server-side Push,是一种网络通信模式,允许服务器主动向客户端推送数据,而无需客户端发起请求。这种技术在实时性要求较高的应用中尤为重要,如在线聊天、实时股票更新、游戏同步等。在传统的...

    Asp.net+Ajax做的无刷新聊天室

    它使用C#或VB.NET等语言编写服务器端代码,通过ASP.NET页面生命周期来处理请求,最终返回JSON或XML格式的数据给前端。 3. **聊天室架构** - **前端**:前端页面主要由HTML、CSS和JavaScript组成,使用jQuery或其他...

    Comet, 下一代反向AJAX(即服务器推送技术- Server-side push)

    Comet 有时也称反向 Ajax 或服务器端推技术(server-side push)。其思想很简单:将数据直接从服务器推到浏览器,而不必等到浏览器请求数据。听起来简单,但是如果熟悉 Web 应用程序,尤其是 HTTP 协议,那么您就会...

    asp.net+jquery长轮询实例

    ASP.NET与jQuery结合实现的长轮询实例是一个高效的数据实时更新技术,主要用于创建实时交互的Web应用程序。在传统的HTTP协议中,服务器与客户端之间采用的是请求-响应模型,即客户端发送请求,服务器处理请求并返回...

    webQQ(ext+asp.net)

    它提供了强大的服务器端控件、事件驱动模型以及自动页面生命周期管理,使得开发者可以使用C#或VB.NET等.NET Framework支持的语言编写代码,构建高效、可扩展的Web应用。 **SQL Server 2005**: Microsoft SQL ...

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

    为了解决这个问题,可以使用Comet技术,如长轮询(Long Polling)或WebSocket,保持服务器与客户端的持久连接,以便即时推送新消息。 6. **聊天室界面设计**:前端页面需要包含一个文本输入框让用户输入消息,一个...

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

    ASP.NET长连接是一种在Web应用中实现实时通信的技术,尤其适用于构建聊天室、实时通知等需要持续更新数据的应用场景。传统的HTTP协议是基于短连接的,每次请求和响应之间都会断开连接,这在实时性要求高的应用中效率...

    atmosphere-applet-comet.jar.zip

    1. **Atmosphere框架**:Atmosphere是一款开源的Java库,旨在解决在Web浏览器与服务器之间进行长连接通信的问题。它支持WebSocket、Server-Sent Events(SSE)等多种实时通信协议,同时兼容各种Web容器,如Tomcat、...

    asp.net 长连接(聊天室例子)打包成解决方案

    ASP.NET长连接是一种在Web应用中实现实时通信的技术,尤其适用于构建聊天室或推送通知等需要持续更新信息的场景。在这个"asp.net 长连接(聊天室例子)打包成解决方案"中,开发者提供了一个具体的实例来演示如何在...

    ASP.NET的Comet即时通讯 源码

    ASP.NET的Comet即时通讯技术是一种在Web应用中实现服务器向客户端实时推送数据的方法。Comet技术打破了传统的HTTP协议的请求-响应模型,允许服务器在客户端保持一个长时间连接,从而能够在有新数据可用时立即推送给...

    catalina-comet.jar

    【Catalina-Comet.jar】是Apache Tomcat服务器中用于支持Comet技术的一个关键组件。Comet是一种在Web开发中实现服务器推送技术的方法,它允许服务器主动向客户端发送数据,而不仅仅是响应客户端的请求。这种技术对于...

    comet4j 所需js以及comet4j-tomcat6.jar、comet4j-tomcat7.jar包

    这个文件提供了与服务器端Comet4j服务交互的接口,允许网页通过JavaScript代码订阅和接收来自服务器的实时消息。在网页应用中,开发者可以将这个脚本引入到HTML页面中,然后调用其提供的API进行事件注册、连接建立、...

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

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

    基于长连接的简易聊天室jQuery+.net 2.0 Comet

    基于长连接的简易聊天室jQuery+.net 2.0 Comet Comet练手,尚有不少bug,还未实现维护用户列表功能 是长连接的不是轮询方式 升级版本 http://download.csdn.net/source/2216847

    comet4j.js+comet4j-tomcat7jar包资源

    它包含了一系列服务器端的类和接口,用于处理与客户端的持久化连接,以及数据的推送。Tomcat 7是一个流行的开源Java应用服务器,支持Servlet和JSP标准,Comet4J利用其特性来实现 comet 技术。你需要将这个jar包添加...

    【ASP.NET编程知识】页面间隔半秒钟更新时间 Asp.net使用Comet开发http长连接示例分享.docx

    在ASP.NET编程中,实现页面间隔半秒钟自动更新时间通常涉及到实时通信技术,这里提到了使用Comet技术。Comet是一种优化的HTTP持久连接技术,允许服务器向客户端推送数据,而不是等待客户端发送请求。这种方法相比于...

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

    Google一下,可以知道ASP.NET实现异步处理的话,实现IHttpAsyncHandler接口就可以了。该接口的BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)方法返回一个IAsyncResult对象。当不...

    asp.net comet

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

Global site tag (gtag.js) - Google Analytics