Firefox 中的高效 HTTP 流 OS
Efficient HTTP streaming in Firefox OS
我需要处理无限的 HTTP 响应(使用 Transfer-Encoding: chunked
header)。
此响应包含图像流,因此必须尽可能高效地处理它。
XmlHttpRequest
不是 这里的解决方案,因为它会将所有回复保存在内存中。另外,如果正在阅读 ArrayBuffer
,则在流媒体结束之前不会填充响应,这意味着永远不会在这里。
所以,由于我在 Firefox OS 下,TCPSocket
API 似乎是我唯一的希望。
我已经开始实施脏 HTTP 堆栈 (here and here),从 IMAP/SMTP 实施中获得灵感,但它仍然非常 慢。
那么,两个问题:
是否值得花时间在这上面,还是我错过了一些更容易的事情?
如果我想实施它,最好的做法是什么?
PS: 我与外部设备通信,所以服务器端的更改在这里是不可能的。
正如 the XMLHttpRequest doc on MDN 所述,Firefox 实际上为流数据提供了额外的 responseType
值(Firefox OS 也是如此),例如 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();
感谢 fabrice 在 #fxos@irc.mozilla.org!
我需要处理无限的 HTTP 响应(使用 Transfer-Encoding: chunked
header)。
此响应包含图像流,因此必须尽可能高效地处理它。
XmlHttpRequest
不是 这里的解决方案,因为它会将所有回复保存在内存中。另外,如果正在阅读 ArrayBuffer
,则在流媒体结束之前不会填充响应,这意味着永远不会在这里。
所以,由于我在 Firefox OS 下,TCPSocket
API 似乎是我唯一的希望。
我已经开始实施脏 HTTP 堆栈 (here and here),从 IMAP/SMTP 实施中获得灵感,但它仍然非常 慢。
那么,两个问题:
是否值得花时间在这上面,还是我错过了一些更容易的事情?
如果我想实施它,最好的做法是什么?
PS: 我与外部设备通信,所以服务器端的更改在这里是不可能的。
正如 the XMLHttpRequest doc on MDN 所述,Firefox 实际上为流数据提供了额外的 responseType
值(Firefox OS 也是如此),例如 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();
感谢 fabrice 在 #fxos@irc.mozilla.org!