转自:http://blog.csdn.net/liyb5619/archive/2010/06/25/5693107.aspx
很多程序都可以通过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,效果很帅。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/liyb5619/archive/2010/06/25/5693107.aspx
分享到:
相关推荐
综上所述,"ajax-demo推送演示例子"涉及到Ajax技术与Servlet服务器端推送的结合,通过长轮询实现页面实时更新的效果。开发者可以通过理解Ajax的工作机制,以及如何在服务器端实现推送,来构建类似的交互式Web应用。
"CometTest"和"CometSample"可能分别代表了测试目录和示例代码,其中"CometTest"可能包含了一些用于验证功能是否正常工作的测试用例,"CometSample"则可能包含了具体的消息推送实现代码,如C#或VB.NET的页面和后台...
为了实现主动向用户推送信息,我们可以利用AJAX(Asynchronous JavaScript and XML)技术。AJAX允许浏览器异步地向服务器发送请求,获取数据,而不必刷新整个页面。在Java+JSP环境中,可以使用JavaScript库,如...
Comet则是通过长轮询或流方式模拟服务器推送。 4. 项目依赖:项目可能依赖于特定的服务器框架、库或者API,如Node.js的WebSocket库ws,或是Java的Jetty服务器。 5. 运行环境:考虑到兼容性和性能,服务器推送系统...
在本示例中,我们关注的是一个支持IE、火狐和谷歌浏览器的服务器推送实现,主要基于ASP.NET平台。 ASP.NET是由微软开发的一种Web应用程序框架,它为开发者提供了构建动态网站、Web应用和服务的强大工具。在ASP.NET...
1. **传统轮询**:利用HTML的meta刷新或者Ajax定时请求来模拟服务器推送。这种方式简单但效率低下,频繁的请求不仅增加服务器压力,还浪费带宽。用户体验也不理想,因为数据更新可能存在延迟。 2. **Ajax轮询**:...
- **Comet技术**:一种模拟服务器推的技术,让服务器主动推送信息到客户端,提升实时性。 - **缓存利用**:对不经常变化的数据,如好友列表,可以缓存在本地,减少网络请求。 5. **兼容性和用户体验** - **跨...
7. **客户端集成**:在浏览器端编写JavaScript代码来处理接收到的推送消息,可能需要利用WebSocket API或者AJAX长轮询等技术。 8. **测试与调试**:对推送系统进行充分的测试,包括模拟大量并发用户、不同网络环境...
源码中包含对Bayeux协议的解析、连接管理、事件处理等功能,可以学习到如何利用Ajax技术实现长连接,以及如何设计高效的事件监听和处理。 总结来说,jQuery-Bayeux是实现Web实时通信的强大工具,它简化了Bayeux协议...
传统的 HTTP 协议是基于请求-响应模式的,即客户端发起请求,服务器响应数据,这并不适合实时数据推送。为了解决这个问题,开发人员引入了 ServerPush 技术,其中一种常见实现方式就是利用 AJAX 和 Webservice 的长...
6. ** SignalR**:ASP.NET的SignalR库是为了解决实时Web应用需求而设计的,它简化了长连接和服务器推送的过程。SignalR支持WebSocket、Forever Frame(IFrame模拟长连接)、Server-Sent Events(SSE)等多种实时通信...
当服务器接收到新的聊天消息时,会立即通过这个连接将消息推送到所有在线的用户,实现即时的消息更新。在DwrTest项目中,可能包含了一个简单的聊天应用示例,展示了如何使用DWR实现这一功能。 **使用DWR的步骤** 1....
- **Comet**:基于HTTP长连接实现服务器向客户端的数据推送。这是本篇文章的重点。 #### Comet详解 Comet技术的核心是使用HTTP长连接,即客户端与服务器之间维持一个持久的连接状态,服务器可以随时通过这个连接...
反Ajax推送,也称为长轮询(Long Polling),是实现服务器到客户端实时数据传输的一种技术,它通过延迟浏览器端的HTTP响应来模拟服务器端的事件驱动推送。 首先,我们需要一个HTML页面作为用户界面,即入口文件`...
2. **WebSocket**: 虽然Servlet 3.0的异步推送可以实现长连接,但WebSocket提供了一种更高效、更低延迟的双向通信方式,特别适合聊天室应用。Servlet 3.1引入了WebSocket API,可以方便地在服务器和客户端之间建立...
在“asp.net 实现服务器推功能”这个主题中,我们将深入探讨如何利用ASP.NET来实现服务器端向客户端实时推送数据的技术,即所谓的“服务器推”。 传统的HTTP协议是基于请求-响应模型的,客户端发起请求,服务器返回...
【AJAX无刷新聊天室】是一种利用Ajax技术实现的在线实时交流平台,它允许用户在不刷新整个网页的情况下发送和接收消息,提升了用户体验。Ajax,全称Asynchronous JavaScript and XML,是通过JavaScript与服务器进行...
在IT行业中,长轮询(Long Polling)是一种常见的实现实时通信的技术,尤其适用于服务器向客户端推送更新数据的场景。本示例中的“长轮询查看服务器CPU的利用率”是利用Ajax与Struts2框架结合,来实现实时监控服务器...