【问题标题】:Can a WebSocket switch its binaryType on the fly?WebSocket 可以即时切换其 binaryType 吗?
【发布时间】:2013-05-23 22:50:01
【问题描述】:

在 JavaScript 中,当您实例化 WebSocket 时:

ws = new WebSocket(url);

你可以设置它的二进制类型:

ws.binaryType = "blob";
// or
ws.binaryType = "arraybuffer";

问题: 我可以即时更改 binaryType 吗?

例如,如果我想使用同一个 WS 实例来交织文本和二进制消息,我可以执行以下操作吗?

ws = new WebSocket(url);
// Send text
ws.binaryType = "blob";
ws.send("this is text");
// Now send binary data
ws.binaryType = "arraybuffer";
var ab = new ArrayBuffer(...); 
ws.send(ab);

在阅读 W3C WebSocket 规范时,我没有看到任何明确说明“您不能更改 binaryType”的内容,但是我见过的每个 WebSocket 示例/用法都设置了 binaryType 一次,然后就永远不会更改它,这有点像表示无法更改。

任何信息将不胜感激。

【问题讨论】:

  • 仅仅因为他们没有将每个场景都作为示例,并不意味着不可能。你自己尝试过吗?
  • 我建议在几个不同的浏览器(和版本)上尝试一下。我认为这两种情况都不是一个好主意。我确实认为大多数人都在使用具有连接回退/回退的抽象层,例如 socket.io 和 SignalR。 ymmv。

标签: javascript binary websocket


【解决方案1】:

您可以随时更改 binaryType,但它只会影响接收到的消息的数据类型。要发送二进制数据,您必须发送 blob 或类型化数组。如果您发送字符串,它将始终作为字符串发送(和传递)。在有线协议中,消息可以是“文本”,表示发送方发送的数据编码为字符串,也可以是“二进制”,表示消息包含原始编码字节流。 binaryType 指示应如何将原始数据传递给应用程序。

换句话说,当您设置 binaryType 时,这意味着下一次消息处理程序为接收二进制消息而触发时,该事件数据将是 binaryType 类型。

【讨论】:

    猜你喜欢
    • 2010-10-01
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多