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

2024-02-11

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

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

还有其他方法吗?


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

这很容易管理。

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

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

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

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

您的服务器需要将数据分成magic byte, header and binary_data处理前。但这很容易实现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过 Websocket 发送文件以及附加信息? 的相关文章

随机推荐

  • Android Studio 2.3 sdk 管理器选项卡呈灰色

    Android Studio 2 3 gt 配置 gt SDK 管理器 这些选项卡呈灰色 SDK 工具 SDK 更新站点 此外 显示包详细信息 复选框呈灰色 系统更新正常 没有错误消息 我认为这在 Studio 2 2 的某个时刻发生过 但
  • 编译项目时出错

    每次我尝试编译程序时都会收到此错误 一些项目功能 例如失败的完整解决方案分析 项目和依赖它的项目已被禁用 XamlCTask 任务不支持 DebugType 参数 验证任务中是否存在该参数 并且该参数是可设置的公共参数 实例属性 无法使用其
  • 如何在 fastapi 中使用刷新令牌?

    我试图找到一个使用的例子刷新令牌 https auth0 com blog refresh tokens what are they and when to use them 在 fastapi 中 快速APIdocs https fast
  • Java 8 lambda 语法中大括号何时是可选的?

    我意识到 Java 8 lambda 实现可能会发生变化 但在 lambda build b39 中 我发现只有当 lambda 表达式返回非 void 类型时才能省略大括号 例如 这样编译 public class Collections
  • MySQL Workbench 是否自动为外键创建索引?

    当我在 MySQL 工作台中创建外键时 索引 选项卡上会出现一个新条目 其与我刚刚创建的外键完全相同 这实际上是外键 由于某种原因显示在 索引 选项卡上吗 或者 MySQL Workbench 是否会尝试为我提供帮助并为我创建一个索引 知道
  • 在 DOM 元素上创建角度范围

    我需要创建一个新的角度范围并将其附加到 DOM 元素 我正在修改第三方控件 因此我无法选择仅使用指令 我需要做类似的事情 thirdPartyCallbackfunction domElement var myNewScope scope
  • segue完成后如何执行一些代码?

    iOS 6 是否可以知道何时UIStoryboardSegue已经完成转变了吗 就像我添加一个UIStoryboardSegue from UIButton推另一个UIViewController在导航控制器上 我想在推送转换完成后立即执行
  • 当没有文件要处理时,如何防止在SSIS包中导入Excel?

    我有一个导入 Excel 文件的 SSIS 包 在包内 我有一个脚本任务 用于在执行 Excel 导入过程之前检查 Excel 文件是否存在 当 Excel 文件不存在时 我无法执行包 因为AcquireConnection error 当
  • SQL Server 中的用户定义数据类型有多酷? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 SQL Server 中的用户定义数据类型是中级 SQL 用户应该了解和使用的吗 使用 UDT 的优点和缺点是什么 我的建议是永远不要使用它们
  • 为什么 RestKit 改变我的响应内容类型?

    简而言之 我尝试使用以下命令从服务器获取数据content typehttp请求头设置为 text html 但由于某种原因 RestKit 将其更改为application JSON 解释 如果我只使用AF网络 https github
  • 从领域数据库中获取单个列 (Android)

    我是领域的初学者 我有一个包含 3 列的表 其名称为ID 姓名 电子邮件 地址 为了获取 Name 列的数据 我们使用如下查询 从表名中选择名称 对于 SQLite 如果我们在Android中使用Realm 那么我们必须使用哪种方法来只获取
  • jinja2 如何删除尾随换行符

    我正在使用 jinja 2 输出 yaml 文件 但似乎无法摆脱尾随换行符和 for 循环的末尾 例如下面的 request path path headers origin somedomain com user agent agent
  • 解雇ViewController:不工作

    我有一个名为 vc0 的视图控制器 其显示如下 self presentViewController vc1 animated YES completion nil 在 vc1 中 我有一个按钮来呈现另一个视图控制器 self presen
  • 获取 Java 数组部分的视图[重复]

    这个问题在这里已经有答案了 我指的是在Java中只获取数组的一部分 https stackoverflow com questions 11001720 get only part of an array in java 它使用范围复制 方
  • set_time_limit 不起作用

    我有一个bigintphp 中的类 用于计算大数 除了时间限制外 效果很好 我设置了时间限制 set time limit 900 在我的 bigint php 文件中 它在本地主机中工作 但在我的网络主机中 当我尝试计算 999 999
  • Angular 7:如何将文件/图像与我的反应式表单一起提交?

    我创建了带有文本输入的简单反应式表单 当提交表单时 我想传递文件输入中的图像 每次我用谷歌搜索时 我都会得到教程 它们向我展示如何上传文件 但它是在没有其他输入字段的情况下完成的 我知道如何做到这一点 但我不明白如何在一次提交中提交表单和文
  • 带 MonoTouch 的 sizeWithFont

    MonoTouch 中的 sizeWithFont 相当于什么 如果没有这样的方法 是否可以通过其他方式调用它 我想做的就是根据文本调整标签大小 下一个更新 MonoTouch 1 1 将提供 UIView StringSize strin
  • NSURLErrorDomain错误代码1002描述

    我是新来的iOS发展 我正在尝试加载一个JSON 这是我的功能 func loadmyJSON urlPath String let url NSURL NSURL string urlPath let session NSURLSessi
  • 从 SQLite 中的 DATETIME 获取月份

    我正在尝试从 a 中提取月份DATETIMESQLite 中的字段 month dateField 效果不太好strftime m dateStart 有任何想法吗 我不明白 答案就在你的问题中 select strftime m date
  • 如何通过 Websocket 发送文件以及附加信息?

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