哪些库可用于使用 WritableStream 和 Node.js Readable 等标准流 API 将数据从浏览器流式传输到服务器? [关闭]

Posted

技术标签:

【中文标题】哪些库可用于使用 WritableStream 和 Node.js Readable 等标准流 API 将数据从浏览器流式传输到服务器? [关闭]【英文标题】:What libraries are available to stream data from the browser to a server using standard stream APIs such as WritableStream and Node.js Readable? [closed] 【发布时间】:2021-10-20 18:16:07 【问题描述】:

我正在尝试将一个相对较大的数据文件 (1 Gig) 从在 Web 浏览器中运行的 Angular 应用程序流式传输到在嵌入式设备上运行的 Node.js 服务器。流式传输是必要的,因为大文件无法放入嵌入式设备的内存中。

我希望找到一个实现各种 Stream API 标准的库:https://developer.mozilla.org/en-US/docs/Web/API/WritableStreamhttps://nodejs.org/api/stream.html#class-streamreadable

所以我可以在网络浏览器端做一些简单的事情,比如:

source_file.stream().pipeTo(socket);

然后在 Node.JS 方面:

socket.pipe(destination_file);

我的第一反应是使用原生浏览器 Fetch API:https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API 但事实证明,大多数浏览器只支持响应流而不支持请求。不幸的是,文档中的浏览器支持矩阵中似乎缺少“流式请求正文”,因此这一事实并非立即显而易见。因此,我在这里打开了一个文档问题:https://github.com/mdn/browser-compat-data/issues/12188。可以在此处找到一篇关于如何通过启用实验性浏览器支持来做到这一点的好文章:https://web.dev/fetch-upload-streaming/。有趣的是,对于 HTTP/1.1,此功能是在分块传输编码之上实现的:https://en.wikipedia.org/wiki/Chunked_transfer_encoding。

接下来,我查看了库并在此处找到了可爱的 websocket-stream 库:https://www.npmjs.com/package/websocket-stream。 虽然这在 Node.JS 端运行良好,但浏览器端很快就变成了一场噩梦,因为需要“浏览”它才能在浏览器上运行。遗憾的是,这将大量浏览器化的依赖项引入到 Angular 项目中,并且涉及到一些复杂的配置来使用它们。

最后,我放弃了寻找并使用上述流 API 在标准 WebSocket 连接上实现了一些非常基本的流。不幸的是,这引入了我不想维持的复杂程度,这就是为什么我继续寻找更好的替代方案。对于那些不支持原生流 API 的浏览器,我可能需要使用 web-streams-polyfills 浏览器端:https://www.npmjs.com/package/web-streams-polyfill。

我考虑并拒绝的其他选项:

stream-http(支持流 API,但依赖于浏览器 API/支持,因此流可能是 1 个方向的)https://github.com/jhiesey/stream-http http-browserify(也依赖于浏览器 API/支持)https://github.com/browserify/http-browserify XMLHttpRequest(不支持流 API)https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest WebRTC(不支持流 API + 复杂的连接协商)https://webrtc.org/ socket.io(不支持流 API)https://socket.io/ Axios(不支持流 API)https://axios-http.com/

任何关于库或技术的建议将不胜感激!

或者,如果我过早地拒绝了任何以前的技术,并且有一种简单的方法可以使用它们从网络浏览器进行流式传输,那么我很想听听如何使用它们。

谢谢!

【问题讨论】:

【参考方案1】:

我认为 libp2p 看起来很适合解决您的问题。

【讨论】:

以上是关于哪些库可用于使用 WritableStream 和 Node.js Readable 等标准流 API 将数据从浏览器流式传输到服务器? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

JCR 存储库可用于 Junit 测试

我可以使用哪些 c# 库来创建用于 iPhone SDK 的 .bundle(压缩)文件

是否有一个 Actionscript 库可用于使用类似 xpath 的语法来定位显示列表中的 Flex 组件?

如何将 Facebook 登录作为 Android 库并使该库可用于其他 Android 应用程序

是否有任何软件或库可用于在 C、C++、Java 或 Ruby 中绘制 3 维螺丝?

Java 和我应该使用哪些 Stun 库?