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
本页版权归作者和博客园所有,欢迎转载,但未经作者同意必须保留此段声明, 且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利
 

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

  1. ASP.NET服务器推送及前后台实时交互

    一:项目需求 页面需要做一个上传Excel功能,并处理Excel中的数据到数据库中 这是一个较为漫长的过程 这时我需要在页面上显示处理进度的提示,给用户一个良好的体验 比如给用户提示“正在上传文档”, ...

  2. PHP Web实时消息后台服务器推送技术---GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样用php实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 ...

  3. Ruby Web实时消息后台服务器推送技术---GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样用Ruby实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推 ...

  4. Web端服务器推送技术原理分析及dwr框架简单的使用

    1 背景 “服务器推送技术”(ServerPushing)是最近Web技术中最热门的一个流行术语.它是继“Ajax”之后又一个倍受追捧的Web技术.“服务器推送技术”最近的流行跟“Ajax ”有着密切 ...

  5. web服务器推送技术

    传统模式的 Web 系统以客户端发出请求.服务器端响应的方式工作.不能满足很多现实应用的需求,譬如: 监控系统:后台硬件温度.电压发生变化: 即时通信系统:其它用户登录.发送信息: 即时报价系统:后台 ...

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

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  7. HTML5中的SSE(服务器推送技术)

    本文原链接:https://cloud.tencent.com/developer/article/1194063 SSE技术详解:一种全新的HTML5服务器推送事件技术 前言 概述 基本介绍 与We ...

  8. Comet服务器推送与SignalR

        HTTP协议是一个典型的Request/Response协议,是基于TCP/IP之上的一个应用层协议,该协议最典型的特点就是无状态且需要客户端发起Request服务端才能进行Response, ...

  9. JavaEE开发之SpringMVC中的静态资源映射及服务器推送技术

    在上篇博客中,我们聊了<JavaEE开发之SpringMVC中的自定义拦截器及异常处理>.本篇博客我们继续的来聊SpringMVC的东西,下方我们将会聊到js.css这些静态文件的加载配置 ...

随机推荐

  1. TCP数据传输过程详解

    在学习三次握手的时候,我们知道其中有seq.ack两个序列号. 如果不仔细了解,那么可能只知道发回去的时候要加一. 下文将着重介绍,关于序列号的传输过程. 最关键的一句话:序列号为当前端成功发送的数据 ...

  2. 泛型实体类List<>绑定到repeater

    后台代码: private void bindnewslist() { long num = 100L; List<Model.news> news = _news.GetList(out ...

  3. Android NDK学习(1) 简介

    转:http://www.cnblogs.com/fww330666557/archive/2012/12/14/2817385.html 一.What is the NDK? The Android ...

  4. LeetCode 81 Search in Rotated Sorted Array II(循环有序数组中的查找问题)

    题目链接:https://leetcode.com/problems/search-in-rotated-sorted-array-ii/#/description   姊妹篇:http://www. ...

  5. ZOJ 3435 Ideal Puzzle Bobble

    ZOJ Problem Set - 3435 Ideal Puzzle Bobble Time Limit: 2 Seconds      Memory Limit: 65536 KB Have yo ...

  6. Unity3D Android动态反射加载程序集

    这种办法在iOS下是不让用的,只能在Android下用.用起来也很方便了. 1.先创建一个c#工程,引用到的UnityEngine.dll在Unity的安装目录里找吧 2.将编译的dll放入Unity ...

  7. gitlab无法push或clone的错误:JWT::DecodeError (Nil JSON web token): lib/gitlab/workhorse.rb:120:in `verify_api_request!'

    使用源码安装的方式升级gitlib7.14到gitlab-8.13.5中文版,然后push的时候报错: 错误信息如下: Started GET "/gitlab/hushizhi/gitla ...

  8. 玩node-images模块---Node.js轻量级跨平台图像编解码库

    Node.js轻量级跨平台图像编解码库 github:https://github.com/zhangyuanwei/node-images Features 功能特性 轻量级:无需安装任何图像处理库 ...

  9. Xcode - Xcodeproject详解

    前言 在 iOS 开发过程中,我们经常会在 Xcode 里面做一些配置,比如添加系统库.第三方库,修改证书配置文件,修改编译属性等等. 在这个过程里面,一般大家仅仅只是根据经验来配置这些,并没有比较清 ...

  10. Twig---基本使用

    三种特殊语法: {{ … }}   “说些什么”:输出一个变量值或者一个表达式的结果到模板.如:{{ item.username }}. twig也包含filters,它可以在模板渲染之前改变输出内容 ...