网站运营 | 站长学院 | 技术文档 | 成语 | 歇后语 | 桌面壁纸 | 帝国时代 | 代码收藏 | IP地址查询 | 生活百科 | 生日密码 | CSS压缩 | 用户评论

利用Ajax实现长连接(模拟推送)

【 网络作者:wxw 更新时间:2011-07-19 | 字体:
[导读]很多程序都可以通过socket来实现长连接,实现消息的即时推送。但由于http请求一般都是短连接,一次请求结束<>,就会断开与服务器的连接>,服务器不能主动推送数据到客户端>,而只能由客户端发起请求,但有些时候,需要在...

 

      很多程序都可以通过socket来实现长连接<<,实现消息的即时推送<。但由于http请求一般都是短连接,一次请求结束>,就会断开与服务器的连接<,服务器不能主动推送数据到客户端,而只能由客户端发起请求,但有些时候><,需要在web上实现即时的消息传输,比如即时聊天、股票动态信息等。
    在Ajax技术被发掘以前,在网页上实现无刷新的即时聊天<,似乎是很困难的事情>,但由于Ajax技术的兴起,人们可以进一步来挖掘它的潜力了,象gmail<、google gtalk的网页版,都是Ajax长连接的重要应用<,目前很多网站可能都已经在使用长连接技术了>,比如SNS网站的即时聊天<<。

1.Ajax短连接方式实现网页聊天

自己画了一个模型图:

 

     常规的短连接模式下,都是通过不间断刷新请求实现的<,比如每间隔3秒发送一次Ajax请求>>,3秒更新一下数据>,然后就这样不间断刷新下去,直到用户关闭网页。这样所带来的弊端就是<,如果用户很长时间都没有操作<,每次刷新都不会返回新数据,这样就造成了资源的浪费<,很多请求都是没必要的;另外一个问题,就是用户的输入,跟数据的请求不是同步的,会造成一定的信息延迟。

2.Ajax长连接方式实现网页聊天

模型图:

 

      Ajax长连接模式,它的刷新是根据数据来执行的>,如果有新数据返回>,接收并解析显示数据>,然后发起新的Ajax请求,如果一段时间内>>,用户没有操作<,则连接处于睡眠状态,一直等待有用户输入或者请求超时,然后发起下个Ajax请求。这样做的好处是,每个消息都会即时推送到客户端,延迟极少;另外每次请求都是有意义的<>,与短连接对比><,效率要高很多。但对于一个用户量很多>>,并且操作非常频繁的网站,长连接模式也会出现过于频繁的刷新问题。目前IE对于HTTP连接数是有限制的>,每个网页只能同时进行两个长连接,第三个长连接会被阻塞<。

利用php在后台sleep<,自己做了个模拟的程序>>>,查看效果

      看了一下别人写的Ajax长连接聊天的案例,以php为例>,基本上是在后台进行不间断的检测,如果有新数据就推送<,如果没有新数据,就一直阻塞<,直到30秒超时<,然后客户端重新发起下一个请求。后台判断里重要的一行代码:usleep(10000); 就是暂停10毫秒,缓解一下CPU压力>,个人感觉如果暂停100毫秒>,时间延迟也是很难感觉到的>。这种方法基本就是把前端的循环,搬到了后台,中间减少了网络传输的环节,如果是一个Ajax的即时聊天系统,要保存用户的聊天记录>>,那就需要跟数据库相结合,每秒10次以上的数据查询,这个与短连接比,必定加大了数据库的压力<,具体怎么优化,这个应该是交给服务器端人员来处理了>>。

如果想要了解更多的内容请Google一下comet,或者看看这里(一个很不错的框架,Ajax Push Engine),这个网站有很多demo<,效果很帅<。

友荐云推荐
  • 转载请注明来源:网站运营 网址:http://www.chinawobo.com/ 向您的朋友推荐此文章
  • 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载<,但请务必注明出处和原始作者>。文章版权归文章原始作者所有<<。对于被本站转载文章的个人和网站,我们表示深深的谢意<。如果本站转载的文章有版权问题请联系我们,我们会尽快予以更正<。
RSS订阅
  • QQ邮箱
  • 填写您的邮件地址,订阅我们的精彩内容:
更多
© 2014 网站运营 - T086.com(原itlearner.com)
微商货源 | 冠珠陶瓷 | 迪威乐云商devmsn | 易奇八字 | wwe美国职业摔角 | 八字算命 | 河南旅游景点大全 |
RunTime:13.54ms QueryTime:7