【发布时间】:2013-08-30 15:10:07
【问题描述】:
我正在尝试对我的服务器上的流式端点使用 ajax 调用。连接应该能够永远接受来自服务器的推送数据,但 XMLHttpRequest 似乎缓冲了整个响应。我只希望浏览器客户端接收每个数据块一次,然后继续下一个。
有没有办法防止这种行为?
更新:似乎 Firefox 能够通过将 XMLHttpRequest.responseType 设置为“moz-chunked-text”或“moz-chunked-arraybuffer”来支持这一点。不过其他浏览器不支持。无论如何,这可能不是最好的方法。
WebKit equivalent to Firefox's "moz-chunked-arraybuffer" xhr responseType
【问题讨论】:
-
Ajax 并不真正意味着永远开放和多条消息传递。可以这样做,但您需要自行确定响应的哪一部分是新的,或者您需要定期回收连接 (long polling)。适合这个角色的是WebSockets。
-
流式 http 端点(没有 websocket 开关)是否因此不适合基于浏览器的客户端使用?
-
也就是说,如果服务器数据流的频率很高,那么长轮询就会丢失数据。
标签: javascript ajax streaming