【问题标题】:how to parse both data & binary websocket messages?如何解析数据和二进制 websocket 消息?
【发布时间】:2013-10-19 19:10:46
【问题描述】:

我找到了this great page,它展示了如何流式传输视频。

他的代码假定onmessage 数据是jpg 就像这样

ws.onmessage = function (e) {
    $("#image").attr('src',  'data:image/jpg;base64,'+e.data);
}

但我也想要音频和其他页面数据。

如何让 WebSockets 解析消息类型和二进制类型?

【问题讨论】:

  • 在数据中包含消息类型并构建自己的协议
  • @fmgp 对,但是如果二进制文件在base64onmessage e.typeString,怎么办? (我故意省略了我所调查的内容,以防止破坏答案)
  • base64 是二进制的字符串表示,所以你可以包装其他元数据
  • @fmgp 现在一切就绪...谢谢!!!

标签: javascript parsing binary websocket message


【解决方案1】:

Websocket 消息中的数据可以是字符串(文本消息)或二进制数据。在您的情况下,它是字符串数据,其中字符串内容是二进制图像的 base64 编码。 在更好的优化程序中,图像也可以二进制传输。

根据消息类型,e.data 将属于另一种类型。

  1. 如果消息是文本消息,则 e.data 将是字符串类型。
  2. 如果消息是二进制消息,则 e.data 将包含 ArrayBufferBlob 对象。您可以通过设置WebSocket.binaryType 属性(例如设置为"arraybuffer")自行决定要接收哪种二进制数据表示。

您可以使用instanceof 来检查您是否收到了二进制或文本消息。

如果您想传输不同类型的二进制数据,您可以在消息的开头使用标头来告诉客户端消息包含什么。例如。将二进制数据的第一个字节声明为标头。如果第一个字节包含 1,则剩余数据为图片,如果第一个字节包含 2,则剩余数据为短音频样本,依此类推。 但是,由于您需要拆分或合并二进制数据数组,因此双方都比较困难。

或者,您可以在客户端和服务器之间使用多个并行 websocket 连接。视频数据打开,音频数据打开,一般消息打开,等等。

【讨论】:

  • 是的,我想传输二进制文件,因为我听说它要小 33%,但是你介意写一些示例代码来存储图像和某种标识符在同一个 @987654326 @ 数据?这是我最困惑的部分。我不想发送消息通知服务器二进制文件即将到来。我想要消息信息(如果是音频或视频、时间等)和二进制文件。非常感谢您!
  • 更新了答案,为您提供一些关于通常如何完成的提示。
  • 很好的解释,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-23
  • 2022-01-23
  • 2011-06-12
  • 1970-01-01
  • 1970-01-01
  • 2014-11-12
  • 1970-01-01
相关资源
最近更新 更多