很多程序都可以通过socket来实现长连接,实现消息的即时推送。但由于http请求一般都是短连接,一次请求结束,就会断开与服务器的连接, 服务器不能主动推送数据到客户端,而只能由客户端发起请求,但有些时候,需要在web上实现即时的消息传输,比如即时聊天、股票动态信息等。
在 Ajax技术被发掘以前,在网页上实现无刷新的即时聊天,似乎是很困难的事情,但由于Ajax技术的兴起,人们可以进一步来挖掘它的潜力了,象 gmail、google gtalk的网页版,都是Ajax长连接的重要应用,目前很多网站可能都已经在使用长连接技术了,比如SNS网站的即时聊天。
1.Ajax短连接方式实现网页聊天
常规的短连接模式下,都是通过不间断刷新请求实现的,比如每间隔3秒发送一次Ajax请求,3秒更新一下数据,然后就这样不间断刷新下去,直到用户关闭网 页。这样所带来的弊端就是,如果用户很长时间都没有操作,每次刷新都不会返回新数据,这样就造成了资源的浪费,很多请求都是没必要的;另外一个问题,就是 用户的输入,跟数据的请求不是同步的,会造成一定的信息延迟。
2.Ajax长连接方式实现网页聊天
Ajax长连接模式,它的刷新是根据数据来执行的,如果有新数据返回,接收并解析显示数据,然后发起新的Ajax请求,如果一段时间 内,用户没有操作,则连接处于睡眠状态,一直等待有用户输入或者请求超时,然后发起下个Ajax请求。这样做的好处是,每个消息都会即时推送到客户端,延 迟极少;另外每次请求都是有意义的,与短连接对比,效率要高很多。但对于一个用户量很多,并且操作非常频繁的网站,长连接模式也会出现过于频繁的刷新问 题。目前IE对于HTTP连接数是有限制的,每个网页只能同时进行两个长连接,第三个长连接会被阻塞。
看 了一下别人写的Ajax长连接聊天的案例,以php为例,基本上是在后台进行不间断的检测,如果有新数据就推送,如果没有新数据,就一直阻塞,直到30秒 超时,然后客户端重新发起下一个请求。后台判断里重要的一行代码:usleep(10000); 就是暂停10毫秒,缓解一下CPU压力,个人感觉如果暂停100毫秒,时间延迟也是很难感觉到的。这种方法基本就是把前端的循环,搬到了后台,中间减少了 网络传输的环节,如果是一个Ajax的即时聊天系统,要保存用户的聊天记录,那就需要跟数据库相结合,每秒10次以上的数据查询,这个与短连接比,必定加 大了数据库的压力,具体怎么优化,这个应该是交给服务器端人员来处理了。
分享到:
相关推荐
servlet 服务器端推送给页面,ajax
ajax长连接及demo
利用Ajax实现无刷新验证用户名和密码是否正确,其中是通小图片来显示结果的。
JAVA开发WEB代码,模拟实现了多种方式模拟服务器推送客户端。包括ajax轮询,长连接,长轮询,iframe刷新方式等
利用Ajax实现的实用聊天室源码 利用Ajax实现的实用聊天室源码
利用Ajax实现树的动态加载(包含基本实现代码)。
主要介绍了ajax实现服务器与浏览器长连接的功能的相关资料,感兴趣的小伙伴们可以参考一下
利用php,mysql,ajax写的简易留言本,对于想快速了解ajax的朋友可以参考下.因为采用了mysql,如果想在自己的网站上架设自己独特的留言本,可以参考下.
利用Jsp+Ajax实现页面无刷新的分页,该程序主要就是实现分页,没有其他模块
2.不再定时不断请求Http请求,降低服务器资源消耗,可参考Taobao核心系统团队博客《http长连接200万尝试及调优》; 3.TX微博等很多应用均采用服务器推技术,你还在用Ajax? 网上关于服务器推技术的文章多,但关于.net...
jsp写的一个简单web聊天。“服务器推送”技术实现。测试工具与环境myeclipse 10+jboss 7+jdk6
利用AJAX实现google搜索引擎,效果还挺好的
在实际应用中我们经常会用到树,无论是用javascript实现还是用TreeView等控件,都能很好的...为了解决这个问题,我曾经在项目里利用Ajax来动态加载节点,即开始只显示必要的节点,当用户展开树的时候再加载对应的节点......
用AJAX实现google输入自动完成的简单模拟
采用ajax+长轮询,简单易懂.实现web对话即时推送。欢迎下载!
PHP利用AJAX技术实现SOCKET通讯,并将返回结果显示在界面。
利用AJAX 实现GRIDVIEW无刷新 排序源码
用ajax实现简单登录验证,很粗糙的作业版。成功之后跳转界面完成
此为利用ajax技术实现的一个简单注册,利用的是c# asp.net技术 坏境用的是visual studio 2005 + SqlServer 2000 包含数据库及源代码 希望对大家有帮助
基于ajax实现异步提交,页面为两个下拉选,左侧一个显示省份,选择不同的省份,右侧的下拉选显示对应的城市