持续的上游Comet风格连接

时间:2011-02-11 21:54:26

标签: javascript ajax cross-browser xmlhttprequest comet

有许多方法可以拥有持久的下游连接。例如,您可以使用隐藏的iframe;或者是一个复杂的XHR模型,它利用onreadystate在维护连接的同时通过应用程序推送部分信息。但是,我一直无法找到一种以同样的精神做持久上游的方法。

如果您在上游推送中使用Connection: Keep-Alive,那么您实际上并没有拆除连接并且每次都重建;非常好。您甚至可以在GET查询中对上游推送进行编码,该查询将返回空文档

但是,即使它很接近,您仍然无法获得持久的,长轮询的下游连接所能获得的性能,低延迟和吞吐量。

除非,这是另一种方法。

以下是关于这种类型的解决方案的一些理论;

  • 也许能够将mixed/multipart流发布到具有边界条件的服务器。
  • 也许能够进行分块转移,每个后续的块都是新数据。

值得注意的是,尽管HTML5或Flash可以实现这一点,但如果没有插件可以在今天突出的浏览器生态系统上实现它,那将非常有用。我的一个愿望是能够在客户端和服务器之间流畅地实现Knuth协程的实验。

有人对此有任何见解吗?感谢。

〜克里斯。

1 个答案:

答案 0 :(得分:2)

在Web浏览器中进行“真正的”双向通信的唯一方法是使用WebSockets。这是他们的主要优势 - 您可以在没有HTTP开销的情况下同时进行上游和下游通信。

如果您的下游连接是通过长轮询传递的,那么您的上游连接将成为常规的旧HTTP请求。

但是,除非您有很多请求,否则我会考虑您是否正在尝试优化不需要优化的内容。即使是当今最小的可用服务器也能够每秒处理数千个HTTP请求。由于大多数实时客户端应用程序监听的次数超过了它们发送的速度,因此快速写入下游连接会严重影响服务器性能。在上游方面,只要您使用“连接:保持活动”以避免套接字设置/拆除的开销,大多数应用程序将通过移动到WebSockets而看到可忽略的性能优势。

(我为建立WebSync的公司工作。)