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