WWDC 2012会话706 – networking最佳实践解释HTTPstream水线 。 默认情况下, 它在iOS上被禁用 在谈话中它将其描述为一个巨大的performance胜利。 为什么你不想使用它?
感谢Google和Stack Overflow,我想我理解了普通HTTPstream水线和HTTP多路复用(例如SPDY)之间的区别,所以我在下面的图表中展示了基于三个常规HTTP请求的stream水线和多路复用之间的区别。 我的两个问题是: 图像是否正确? 是否真的,如果stream水线不会有头部阻塞问题,它会像HTTP多路复用一样快? 还是我错过了一个额外的差异?
我已经读过这个问题,但并不完全回答我的问题。 不幸的是,自从我上次查看Ajax以来,XHR对象中的内容看起来已经发生了变化,因此在完成填充之前不能再直接访问responseText 。 我必须编写一个页面,使用AJAX(最好是jQuery,但我愿意build议)通过HTTP从我无法控制的服务器检索CSV数据。 响应数据可能相当大; 一个兆字节的文本并不less见。 服务器是stream的友好的。 还有什么方法可以直接从Javascript返回数据stream吗? 我可以select编写一些居于中间的PHP代码,并使用某种“Comet”技术(长轮询,EventSource等),但是如果可能,我宁愿避免这种情况。 如果是相关的,假设这个问题,用户有最新版本的Firefox / Chrome / Opera和旧的浏览器兼容性不是问题。
我已经在SO和网上阅读了很多关于我的问题标题中的关键字的post,并且从中学到了很多东西。 我读到的一些问题与具体的实施挑战有关,而另一些则关注一般概念。 我只是想确保我理解了所有的技术概念,以及为什么技术X是发明于技术Y等等的理由。 所以在这里: Http轮询:基本上AJAX,使用XmlHttpRequest。 Http长轮询: AJAX,但服务器坚持的响应,除非服务器有更新,一旦服务器有更新,它发送它,然后客户端可以发送另一个请求。 缺点是额外的头数据需要来回发送,造成额外的开销。 Http Streaming:类似于长轮询,但是服务器用“Transfer Encoding:chunked”来响应头部,因此每次服务器发送一些数据(因此保存额外的头部开销),我们不需要发起新的请求。 这里的缺点是我们必须“理解”并弄清数据的结构,以区分服务器发送的多个块。 Java Applet,Flash,Silverlight:它们提供了通过tcp / ip连接套接字服务器的能力,但由于它们是插件,开发人员不想依赖它们。 WebSockets:它们是以下列方式试图解决上述方法的缺点的新API: WebSockets相对于Java Applets,Flash或Silverlight等插件的唯一优势在于,WebSockets本身就内置于浏览器中,不依赖于插件。 WebSocket相对于HTTPstream的唯一优势是您不必花费精力来理解和parsing接收到的数据。 通过长轮询的WebSocket的唯一优点是消除额外的头大小和打开和closures请求的套接字连接。 还有什么其他重要的差异,我失踪了? 我很抱歉,如果我重复询问或将已经存在的许多问题合并成一个单一的问题,但我只想从所有关于这些概念的Web和Web上的信息中完全理解。 谢谢!