Firefox OS中高效的HTTP流

Efficient HTTP streaming in Firefox OS

本文关键字:HTTP 高效 OS Firefox      更新时间:2023-09-26

我需要处理一个无限的HTTP响应(与Transfer-Encoding: chunked标头)。

此响应包含一个图像流,因此必须尽可能高效地处理。

XmlHttpRequest而不是,因为它将所有的应答保存在内存中。另外,如果读取ArrayBuffer,则在流结束之前不会填充响应,这意味着永远不会在这里。

所以,因为我在Firefox操作系统下,TCPSocket API似乎是我唯一的希望。

我已经开始实现一个肮脏的HTTP堆栈(这里和这里),从IMAP/SMTP实现中获得灵感,但它仍然非常慢。

那么,两个问题:

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

  2. 如果我想实现它,什么是最好的做法,不要忘记?

PS:我与外部设备通信,所以服务器端的更改在这里是不可能的。

正如MDN上的XMLHttpRequest文档所述,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!