我有一些关于Comet的信息,但我想知道它是如何保持连接打开的(从客户端到服务器)。它如何做到这一点呢?
发布于 2012-04-23 15:51:51
从长远来看,Comet或长轮询ajax不会使连接保持打开状态。
HTTP是无状态的,它发送请求并获得响应。就这样。
那么,连接看起来是如何保持打开的呢?因为它是滥用的HTTP请求的。
当您发送请求时,客户端将等待响应,直到响应到来,或者直到服务器确定此连接已达到其超时。
在Comet中,服务器故意不立即响应。只有当他想要发送响应时它才会应答。这就是客户端发送HTTP请求并等待响应或超时的原因。
这样,当它只是滥用HTTP请求的超时属性时,看起来就像是某种从服务器到客户端的推送。
例如,这是一些comet代码(为了简短起见,使用jQuery ):
setTimeout( function comet () {
$.get( '/some/url', {}, function ( data ) {
// Process the request's response
// And recall setTimeout
setTimeout( comet, 1 )
} )
}, 1 )https://stackoverflow.com/questions/10276467
复制相似问题