如何解析数据和二进制websocket消息?

时间:2013-10-11 16:10:43

标签: javascript parsing binary websocket message

我发现this great page显示了如何流式传输视频。

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

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

但我也希望获得音频和其他页面数据。

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

1 个答案:

答案 0 :(得分:6)

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

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

  1. 如果邮件是短信,那么e.data将是字符串类型。
  2. 如果消息是二进制消息,则e.data将包含ArrayBufferBlob对象。您可以通过设置WebSocket.binaryType属性(例如"arraybuffer")来自行决定要接收的二进制数据的哪种表示。
  3. 您可以使用instanceof检查是否收到了二进制文字或短信。

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

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