【问题标题】:Comet background architecture彗星背景架构
【发布时间】:2012-05-03 19:46:30
【问题描述】:

我有一些关于 Comet 的信息,但我想知道它如何保持连接打开(从客户端到服务器)。 它是怎么做到的?

【问题讨论】:

标签: javascript asp.net web push comet


【解决方案1】:

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 )

【讨论】:

  • 实际上它确实保持连接打开 - 直到服务器上有可用数据或遇到超时。 然后打开一个新的连接。
  • 编辑了答案,我把它和长轮询 ajax 弄混了,谢谢你让我学到了一些东西!
猜你喜欢
  • 2011-03-08
  • 2011-12-31
  • 1970-01-01
  • 1970-01-01
  • 2012-01-23
  • 2010-11-24
  • 1970-01-01
  • 2010-10-17
  • 1970-01-01
相关资源
最近更新 更多