基于comet服务器推送技术(web实时聊天)

原文 http://www.cnblogs.com/zengqinglei/archive/2013/03/31/2991189.html

Comet 也称反向 Ajax 或服务器端推技术.其思想很简单:将数据直接从服务器推到浏览器,而不必等到浏览器请求数据。

主要思想:服务器端将数据推送到客户端(浏览器)

本人做了简单的web实时聊天系统:服务器推送(聊天).zip

系统简单说明如下:

{

系统所用数据库:sqlite数据库

  UserInfo:用户信息表

  UserRelation:用户关系表

  MessageInfo:聊天信息表

开发结构:

  结构图:

    

  三层开发:

    数据层--与sqlite数据库之间的交互

    逻辑层--数据转换

    实体层--数据对象

  Web服务:利用WebService对外提供公共的接口,主要提供客户端与服务器端数据之间的交互。

  客户端(asp.net):利用comet中ajax反向技术推送聊天信息。

项目操作演示效果:

  1.用户登录(测试账户{liger_zql,12345},{漠然,12345})

  说明:用浏览器开启两个选项卡浏览Login.aspx页面分别如下

  

  

  2.聊天界面

  登录成功后,两选项卡分别跳转到如下界面:双击在线好友中的行,则可开始进行聊天。

  liger_zql聊天界面:

  

  漠然聊天界面:

  

  其中聊天过程是使用了comet推送技术。

  3.用户注册界面

  

}

项目中comet推送技术

  客户端

//ajax长轮询function PostSubmit(params, success) {
    $.post("comet_broadcast.asyn", params,
    success, "json");
}
function Keepline() {
    var array = new PHPArray("Keepline");
    var success = function (data, status) {
        if (data.ResponseStatus == 1) {
            ShowMessage(data.ResponseData, "recive");
        }
        Keepline();
    }
    PostSubmit(array.ToJson(), success);
}

  服务器端:

    #region 发送消息
        private void SendMsg()
        {
            MessageInfo message = new MessageInfo()
            {
                SendUserId = m_Context.Request["UserId"],
                ReciveUserId = m_Context.Request["ReciveUserId"],
                Content = m_Context.Request["Content"]
            };
            //获取服务器端处理结果
            string result = sdk.Send_Msg(message);
            if (dict.ContainsKey(message.ReciveUserId))
            {
                //向对发送信息
                dict[message.ReciveUserId].Result = result;
                dict[message.ReciveUserId].Send();
            }
            //向自己发送处理结果
            _IAsyncResult.Result = result;
            _IAsyncResult.Send();
        }
        #endregion

其中(项目网站--WebChat_ServerPush和服务器端处理--ServerPushHttpHandler)需要在Web.config配置文件中做出如下配置:

<httpHandlers>
      <!--comet长连接配置字节-->
      <add verb="*" path="comet_broadcast.asyn" type="ServerPushHttpHandler.ServerPush,ServerPushHttpHandler"/>
    </httpHandlers>

Comet是一个web应用模型,在该模型中,请求被发送到服务器端并保持一个很长的存活期,直到超时或是有服务器端事件发生。在该请 求完成后,另一个长生存期的Ajax请求就被送去等待另一个服务器端事件。使用Comet的话,web服务器就可以在无需显式请求的情况下向客户端发送数 据。

Comet的一大优点是,每个客户端始终都有一个向服务器端打开的通信链路。服务器端可以通过在事件到来时立即提交(完成)响应来把事件推给客户端,或者它甚至可以累积再连续发送。因为请求长时间保持打开的状态,故服务器端需要特别的功能来处理所有的这些长生存期请求。

 源码:服务器推送(聊天).zip

最后预祝有需要了解该技术的程序猿天天向上!!!(~ o ~)~zZ

作者:曾庆雷
出处:http://www.cnblogs.com/zengqinglei
本页版权归作者和博客园所有,欢迎转载,但未经作者同意必须保留此段声明, 且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利
时间: 2024-10-05 23:52:52

基于comet服务器推送技术(web实时聊天)的相关文章

comet实现服务器推送技术出现了一些问题

问题描述 comet实现服务器推送技术出现了一些问题 如题 自己写的基于comet服务器推送信息的网站,自己调试的时候没有问题,数据能够更改. 但是 发布到IIS上, 用别的电脑访问的时候,数据不能更改,感觉没有运行代码. 这两台电脑的 防火墙都是关闭的~ js $(function () { a(); } function a(){ $.ajax({ url: "../../NetAnomaly.ashx?"+Math.random(), type: "post"

java web项目中应用的服务器推送技术都有哪些?有没有性能问题

问题描述 java web项目中应用的服务器推送技术都有哪些?有没有性能问题 java web项目中应用的服务器推送技术都有哪些?有没有性能问题 解决方案 Web实时推送,选择GoEasy推送服务, 代码简单易懂,几分钟就可以自己写好一个在线聊天demo. 中英文文档齐全.官网:https://goeasy.io 解决方案二: 目前,websocket是个很好的方向. 解决方案三: websocket. http://blog.csdn.net/jiangcs520/article/detail

HTML5服务器推送技术的相应实现细节

对于某些类型的应用来说,服务器推送事件是最佳的选择.本文对服务器推送技术进行了详细的介绍,包含浏览器端和服务器端的相应实现细节,为在实践中使用该技术提供了指南. 对于一般的 Web 应用开发,大多数开发人员并不陌生.在 Web 应用中,浏览器和服务器之间使用的是请求 / 响应的交互模式.浏览器发出请求,服务器根据收到的请求来生成相应的响应.浏览器再对收到的响应进行处理,展现给用户.响应的格式可能是 HTML.XML 或 JSON 等.随着 REST 架构风格和 AJAX 的流行,服务器更多地使用

深入了解 Dojo 的服务器推送技术

服务器推送技术和 Bayeux 协议简介 服务器推送技术的基础思想是将浏览器主动查询信息改为服务器主动发送信息.服务器发送一批数据,浏览器显示这些数据,同时保证与服务器的连接.当服务器需要再次发送一批数据时,浏览器显示数据并保持连接.以后,服务器仍然可以发送批量数据,浏览器继续显示数据,依次类推.基于这种思想,这里我们要引出 Bayeux 协议. Bayeux 是一套基于 Publish / Subscribe 模式,以 JSON 格式在浏览器与服务器之间传输事件的通信协议.该协议规定了浏览器与

详解Comet服务器推送与SignalR

HTTP协议是一个典型的Request/Response协议,是基于TCP/IP之上的一个应用层协议,该协议最典型的特点就是无状态且需要客户端发起Request服务端才能进行Response,这意味着服务端无法主动"推送"信息.但现代很多应用需求这种"服务端推送",比如说监控系统.报价系统.游戏.协同文档.进度条等应用.因此本文会谈论服务器推送技术的不同手段,以及在Asp.Net中的SignalR是如何封装这些细节来达到推送的目的. 实现服务器推送的一些手段 由于H

Comet服务器推送,在IIS上需要怎么配置?

问题描述 Comet服务器推送,在IIS上需要怎么配置? 解决方案 解决方案二:好像要配什么映射文件.解决方案三:我也看到有人这么说但具体配置什么没人提~

JAVA Web实时消息后台服务器推送技术---GoEasy_javascript技巧

越来越多的项目需要用到实时消息的推送与接收,我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari等等. 支持不同的开发语言:GoEasy推送 提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过Restful API来实现后台实时推送.

Android 服务器推送技术

  在开发Android和iPhone应用程序时,我们往往需要从服务器不定的向手机客户端即时推送各种通知消息,iPhone上已经有了比较简单的和完美的推送通知解决方案,可是Android平台上实现起来却相对比较麻烦,最近利用几天的时间对Android的推送通知服务进行初步的研究. 在Android手机平台上,Google提供了C2DM(Cloudto Device Messaging)服务,起初我就是准备采用这个服务来实现自己手机上的推送功能. Android Cloud to Device M

请教大家一个关于利用 推送技术 实现聊天的问题

问题描述 我现在已经知道了如何使用服务器推送技术,但是我还是有一个问题不懂,就是两个网页之间到底如何交换信息的?就是说一个网页发送了一条消息,另外一个网页的会话在服务器是如何访问到的啊? 解决方案 解决方案二:占个沙发先.说白了,有A.aspx页面和B.aspx页面.A.aspx页面发出了一段文字,B.aspx页面如何能得到?不访问数据库,不使用Application保存聊天信息.那样服务器会爆掉的解决方案三:有没有高手来啊?小弟在线等啊.解决方案四:该回复于2012-07-28 10:27:0