在JavaScript中,当你实例化WebSocket时:
ws = new WebSocket(url);
可以设置为binaryType:
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一次,然后永远不会改变它,这似乎表明它不能改变。
您可以动态地更改binaryType,但是它只影响接收到的消息的数据类型。要发送二进制数据,必须发送blob或类型化数组。如果您发送一个字符串,它将始终作为字符串发送(和交付)。在有线协议中,消息可以是"文本",即发送方发送的数据编码为字符串,也可以是"二进制",这意味着消息包含原始编码的字节流。binaryType指示原始数据应该如何传递给应用程序。
换句话说,当您设置binaryType时,它意味着下次消息处理程序为接收二进制消息而触发时,该事件数据的类型将是binaryType。