javascript – 持久的上游Comet风格连接

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

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

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

除非,也就是说,还有另一种方法可以做到这一点.

这里有一些关于这种类型的解决方案的理论;

>也许能够使用边界条件将混合/多部分流发布到服务器.
>也许是一种进行分块传输的能力,每个后续的块都是新数据.

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

有人对此有任何见解吗?谢谢.

〜克里斯.

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

如果您的下游连接是使用长轮询进行的,那么您的上游连接将成为常规的旧HTTP请求.

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

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

点赞