|
. 什么是服务器推技术 通常情况下,浏览器跟服务器的交互,都是由浏览器发起一个request, 服务器马上返回一个response, 这个看起来就像是浏览器从服务器拉了一个响应回来, 所以叫pull。 如果服务器可以主动的给客户端发送一个响应, 就像是服务器推了一个响应给客户端, 这种情况叫做push。 服务器推技术就是讲服务器如何实现向客户端push 信息。 2. 怎么实现服务器推技术 服务器要主动给客户端发送信息, 那么首先必然要建立起从客户端到服务器的连接并保持之, 从实现方式可分为2种 1. 借助外部控件,直接使用socket连接到服务器 浏览器可以借助插件/控件, 比如java的applet, 或者是flash, 可以直接建立起到服务器端的socket。 这种实现方式最简单,前提是浏览器要支持applet或者是flash, 它还有一个缺点就是, 因为通常情况下socket是连接到服务器的非80端口, 如果中间有防火墙屏蔽了非80端口, 那么这种方式将无法使用。 2. 不借助外部控件,直接让浏览器发起HTTP请求,并保持这个连接。 这种方式有个术语,叫comet. 这种方式一般又可分为2种: 基于HTTP流 保持一个永久的HTTP连接, 服务器在有需要的时候把信息流发送给客户端 这种方法是有前提或者缺点的, - 服务器到客户端的连接不能超时, 事实上我们常用的apache都会有超时设置
- 浏览器要有能处理流数据的能力。 很多时候下浏览器会等待整个响应结束才会开始处理数据,而且中间的proxy服务器经常会等响应结束才会把数据传给客户端。
- 容易产生僵尸连接
即使是客户端主动断掉连接,但是如果有中间proxy的存在,proxy可能会缓存这个连接, 导致Proxy到服务器端的连接并没有断掉,这样服务器就存在很多僵尸连接。 long polling 客户端发起一个请求, 服务器收到后如果有信息要发给客户端则马上发送, 如果没有这进入阻塞状态直到有信息要发送给客户端,客户端从服务器收到信息后, 马上重新向服务器建立新连接, 如此循环之。 这种实现方式当然也有连接不能超时的前提,但是它已经没有了Proxy缓存连接导致僵尸连接的缺点,也不需要客户端具备流处理的能力。因为它就像是普通的request-response方式, 只是response的时间可能会长一点而已。 3. 服务器推技术能有什么应用 客户端需要实时知道服务器发生的事件的时候,就可以使用服务器推技术。比如: - 监控系统:后台硬件热插拔、LED、温度、电压发生变化;
- 即时通信系统:其它用户登录、发送信息;
- 即时报价系统:后台数据库内容发生变化;
- web game, chatroom等
[ 本帖最后由 Gasgoo 于 2010-5-10 15:32 编辑 ] |
|