有许多方法可以拥有持久的下游连接。例如,您可以使用隐藏的iframe;或者是一个复杂的XHR模型,它利用onreadystate
在维护连接的同时通过应用程序推送部分信息。但是,我一直无法找到一种以同样的精神做持久上游的方法。
如果您在上游推送中使用Connection: Keep-Alive
,那么您实际上并没有拆除连接并且每次都重建;非常好。您甚至可以在GET
查询中对上游推送进行编码,该查询将返回空文档
但是,即使它很接近,您仍然无法获得持久的,长轮询的下游连接所能获得的性能,低延迟和吞吐量。
除非,这是另一种方法。
以下是关于这种类型的解决方案的一些理论;
mixed/multipart
流发布到具有边界条件的服务器。值得注意的是,尽管HTML5或Flash可以实现这一点,但如果没有插件可以在今天突出的浏览器生态系统上实现它,那将非常有用。我的一个愿望是能够在客户端和服务器之间流畅地实现Knuth协程的实验。
有人对此有任何见解吗?感谢。
〜克里斯。
答案 0 :(得分:2)
在Web浏览器中进行“真正的”双向通信的唯一方法是使用WebSockets。这是他们的主要优势 - 您可以在没有HTTP开销的情况下同时进行上游和下游通信。
如果您的下游连接是通过长轮询传递的,那么您的上游连接将成为常规的旧HTTP请求。
但是,除非您有很多请求,否则我会考虑您是否正在尝试优化不需要优化的内容。即使是当今最小的可用服务器也能够每秒处理数千个HTTP请求。由于大多数实时客户端应用程序监听的次数超过了它们发送的速度,因此快速写入下游连接会严重影响服务器性能。在上游方面,只要您使用“连接:保持活动”以避免套接字设置/拆除的开销,大多数应用程序将通过移动到WebSockets而看到可忽略的性能优势。
(我为建立WebSync的公司工作。)