2011-02-11 56 views
4

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

如果您在上游推动中使用Connection: Keep-Alive,那么您实际上并不拆卸连接并重建每次;那很好。你甚至可以编码你的上游推动GET查询,将返回一个空文档

但是,即使它接近,你仍然没有相当的性能,低延迟和吞吐量,你可以得到持久的,长时间轮询的下游连接。

除非,也就是说,有另一种方式来做到这一点。

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

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

值得注意的是,尽管这对HTML5或Flash来说可能是可能的,但如果能在没有插件的情况下在没有插件的情况下使用,那将是非常有用的。我的愿望之一是能够在客户端和服务器之间流畅地实施Knuth协同程序的实验。

任何人都有这方面的见解?谢谢。

〜chris。

回答

2

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

如果您的下游连接使用长轮询提供,那么您的上游连接将是常规的旧HTTP请求。

但是,除非您有很多请求,否则我会考虑您是否在尝试优化某些并不需要优化的东西。即使是目前最小的可用服务器,每秒也能处理数千个HTTP请求。而且由于大多数实时客户端应用程序的收听次数超过了它们发送的时间,因此它正在快速写入下游连接,这将真正影响服务器性能。在上游端,只要您使用“Connection:Keep-Alive”来避免套接字设置/拆卸的开销,大多数应用程序通过迁移到WebSockets就会看到微不足道的性能优势。 (我为建立WebSync的公司工作)