基于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的一大优点是,每个客户端始终都有一个向服务器端打开的通信链路。服务器端可以通过在事件到来时立即提交(完成)响应来把事件推给客户端,或者它甚至可以累积再连续发送。因为请求长时间保持打开的状态,故服务器端需要特别的功能来处理所有的这些长生存期请求。
最后预祝有需要了解该技术的程序猿天天向上!!!(~ o ~)~zZ
作者:曾庆雷
出处:http://www.cnblogs.com/zengqinglei
本页版权归作者和博客园所有,欢迎转载,但未经作者同意必须保留此段声明, 且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利
基于comet服务器推送技术(web实时聊天)的更多相关文章
- ASP.NET服务器推送及前后台实时交互
		
一:项目需求 页面需要做一个上传Excel功能,并处理Excel中的数据到数据库中 这是一个较为漫长的过程 这时我需要在页面上显示处理进度的提示,给用户一个良好的体验 比如给用户提示“正在上传文档”, ...
 - PHP Web实时消息后台服务器推送技术---GoEasy
		
越来越多的项目需要用到实时消息的推送与接收,怎样用php实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 ...
 - Ruby Web实时消息后台服务器推送技术---GoEasy
		
越来越多的项目需要用到实时消息的推送与接收,怎样用Ruby实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推 ...
 - Web端服务器推送技术原理分析及dwr框架简单的使用
		
1 背景 “服务器推送技术”(ServerPushing)是最近Web技术中最热门的一个流行术语.它是继“Ajax”之后又一个倍受追捧的Web技术.“服务器推送技术”最近的流行跟“Ajax ”有着密切 ...
 - web服务器推送技术
		
传统模式的 Web 系统以客户端发出请求.服务器端响应的方式工作.不能满足很多现实应用的需求,譬如: 监控系统:后台硬件温度.电压发生变化: 即时通信系统:其它用户登录.发送信息: 即时报价系统:后台 ...
 - 深入了解 Dojo 的服务器推送技术
		
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...
 - HTML5中的SSE(服务器推送技术)
		
本文原链接:https://cloud.tencent.com/developer/article/1194063 SSE技术详解:一种全新的HTML5服务器推送事件技术 前言 概述 基本介绍 与We ...
 - Comet服务器推送与SignalR
		
HTTP协议是一个典型的Request/Response协议,是基于TCP/IP之上的一个应用层协议,该协议最典型的特点就是无状态且需要客户端发起Request服务端才能进行Response, ...
 - JavaEE开发之SpringMVC中的静态资源映射及服务器推送技术
		
在上篇博客中,我们聊了<JavaEE开发之SpringMVC中的自定义拦截器及异常处理>.本篇博客我们继续的来聊SpringMVC的东西,下方我们将会聊到js.css这些静态文件的加载配置 ...
 
随机推荐
- could not bind to address 0.0.0.0:80 no listening sockets available, shutting down
			
在启动apache服务的时候(service httpd start 启动)出现这个问题. 出现这个问题,是因为APACHE的默认端口被占用的缘故.解决方法就是把这个端口占用的程序占用的端口去掉. 使 ...
 - ASP.NET使用百度编辑器(UEditor)使用方法
			
ASP.NET使用百度编辑器(UEditor)方法如下 第一步到百度官网下载百度编辑器 http://ueditor.baidu.com/website/download.html 下载.net版本 ...
 - UINavigationItem 设置UIBarButtonItem
			
转:http://hi.baidu.com/ivan_xu/item/237bb1ad77eff9b028ce9d7c 有A.B两个ViewController,假如A push B: UINavig ...
 - jquery中event对象属性与方法小结
			
JQuery事件中的Event属性是经常性的被忽略的.大多数时间你的确不怎么用它,但有些时候它还是它还是有作用的.如获知触发时用户的环境(是否按了shift etc).每个浏览器对event都有不同的 ...
 - CF 1073C Vasya and Robot(二分答案)
			
C. Vasya and Robot time limit per test 1 second memory limit per test 256 megabytes input standard i ...
 - Mac下一款门罗币挖矿木马的简要分析
			
背景 最近在应急中发现了一款Mac上的挖矿木马,目标是挖门罗币,经过走访,受害用户都有从苹果电脑上安装第三方dmg的经历(其中可以确定一款LOL Mac私服安装app会导致该木马),怀疑在网上很多第三 ...
 - maven用变量的方法统一管理jar包版本
			
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
 - Centos 7.x系统安装后的初始化配置
			
1.配置IP.网关,编辑/etc/sysconfig/network-scripts/ifcfg-eno16777736 TYPE=Ethernet BOOTPROTO=none //默认为dhcp ...
 - 【BZOJ1187】[HNOI2007]神奇游乐园 插头DP
			
[BZOJ1187][HNOI2007]神奇游乐园 Description 经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细 ...
 - [工具] 护眼宝 – 傻瓜版屏幕蓝光过滤应用[Win/Android]
			
护眼宝 是一款 Windows.Android 下的屏幕蓝光过滤工具,傻瓜式操作,支持智能模式.疲劳提醒,可以有效的保护视力及减小夜间使用电脑.手机对睡眠对影响. 来自发现频道. 类似应用有很多了 ...