我需要处理无限的HTTP响应(使用Documentation标头)。
此响应包含图像流,因此必须尽可能高效地处理。
XmlHttpRequest
不这里的解决方案,因为它将所有回复保留在内存中。另外,如果阅读ArrayBuffer
,则在流式传输结束之前不会填充响应,这意味着永远不会在此处。
所以,由于我在Firefox OS下,Transfer-Encoding: chunked
API似乎是我唯一的希望。
我已经开始实现脏HTTP堆栈(TCPSocket
和here),从IMAP / SMTP实现中获取灵感,但它仍然非常缓慢。
所以,有两个问题:
值得花时间在这上面,还是我更想念一些事情?
如果我想实施它,最好的做法是什么?
PS:我与外部设备进行通信,因此这里无法对服务器端进行更改。
答案 0 :(得分:1)
正如the XMLHttpRequest doc on MDN所述,Firefox实际上为流数据提供了额外的responseType
值(Firefox操作系统也是如此),例如moz-chunked-arraybuffer
。
var xhr = new XMLHttpRequest({ mozSystem: true });
xhr.responseType = "moz-chunked-arraybuffer";
xhr.open('GET', deviceStreamingUrl);
xhr.addEventListener('progress', event => {
processChunk(xhr.response);
});
xhr.send();
感谢#fxos@irc.mozilla.org上的fabrice!