node.js - 如何通过 Websocket 发送文件以及附加信息?

标签 node.js websocket base64 bson

我正在开发一个 Web 应用程序,用于从管理界面将图像、视频等发送到两个显示器。我在服务器端使用 Node.js 中的 ws 。我已经实现了选择服务器上可用的图像和外部 URL 并将它们发送到客户端,但我也希望能够通过文件输入直接发送从设备中选择的图像。我设法使用 base64 来做到这一点,但我认为效率相当低。

目前,我发送一个字符串化的 JSON 对象,其中包含资源必须发送到的客户端、资源类型和资源本身,在服务器中解析它并将其发送到适当的客户端。我知道我可以将 Websocket binaryType 设置为 blob 并仅发送 File 对象,但随后我无法告诉服务器必须将其发送到哪个客户端。我尝试使用 typeson 和 BSON 来完成此任务,但没有成功。

还有其他方法吗?

最佳答案

您可以通过 WebSocket 发送原始二进制数据。

管理起来非常容易。

一种选择是在前面添加一个“魔术字节”(将消息标记为非 JSON 的标识符)。例如,在二进制消息前面添加 B 字符。

服务器所要做的就是在收集二进制数据之前测试第一个字符(如果魔术字节不存在,则可能是正常的 JSON 消息)。

更严格的实现将在魔术字节后附加一个 header (即文件名、总长度、发送数据的位置等)。

这允许在断开连接时恢复上传(仅发送未确认已接收的部分。

在处理之前,您的服务器需要将数据拆分为magic byteheaderbinary_data。但这很容易完成。

关于node.js - 如何通过 Websocket 发送文件以及附加信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50315972/

相关文章:

java - Play[2.2] websocket 今日美国 api 错误 com.fasterxml.jackson.core.JsonParseException : Unexpected character ('<' (code 60)): expected a valid value

node.js - 考虑将 Web Socket 用于 JavaEE 项目

javascript - 通过 HTML 文档与 Electron 交互

javascript - 将服务器发送的事件与 Express 一起使用

javascript - express - 路线分离方法

websocket - PubNub 是否在后台使用 WebSockets 和/或 XMPP?

java - 解码base64数据并且无法作为文件下载

java - 无法在android中通过JSON将base64字符串图像发送到asp.net web服务

检查字符串中的每个字符会产生意想不到的结果

node.js - nodejs 应用程序在 docker-compose up 时以代码 0 退出