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 实施中获得灵感,但它仍然非常 慢。

那么,两个问题:

  1. 是否值得花时间在这上面,还是我错过了一些更容易的事情?

  2. 如果我想实施它,最好的做法是什么?

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!