如何判断 websocket onmessage 的参数类型?

Posted

技术标签:

【中文标题】如何判断 websocket onmessage 的参数类型?【英文标题】:How do I tell the type of websocket onmessage's parameter? 【发布时间】:2012-03-16 19:11:31 【问题描述】:

这里https://developer.mozilla.org/en/WebSockets/WebSockets_reference/MessageEvent 声明属性数据是DOMString 类型|斑点 |数组缓冲区。我如何告诉它我想要哪种类型?或者我怎么知道我得到的是哪种类型?

【问题讨论】:

【参考方案1】:

服务器可以发送的适当的两种类型的帧是文本帧和二进制帧 (5.2)。 ws.binaryType 允许您定义要以哪种格式获取二进制数据。

二进制数据:取决于binaryType 设置为arraybufferblob 文本数据:字符串

要确定类型,可以使用:

e.data instanceof ArrayBuffer e.data instanceof Blob typeof e.data === "string"

Reference:

4。如果type表示数据为Text,则将eventdata属性初始化为data

如果type表示数据是Binary,并且binaryType设置为“blob”,那么将eventdata属性初始化为将 data 表示为其原始数据的新 Blob 对象。

如果type表示数据是Binary,并且binaryType设置为“arraybuffer”,那么将eventdata属性初始化为一个新的只读ArrayBuffer内容为data的对象。

【讨论】:

【参考方案2】:

“我如何告诉它我想要哪种类型?”

websocket 帧中的数据类型由发送方确定(参见1.2),因此无法由接收方设置。如果发送文本数据,则e.data 的类型为string。如果发送二进制数据,则e.data 将是ArrayBufferBlob 的实例,具体取决于接收方设置的ws.binaryType 属性的值。

“或者我怎么知道我得到的是哪种类型?”

pimvdb 已经回答了这个问题。

【讨论】:

以上是关于如何判断 websocket onmessage 的参数类型?的主要内容,如果未能解决你的问题,请参考以下文章

WebSocket 频繁 onmessage 零拷贝

在 onMessage 注释中具有多个数据的 Websocket

Java WebSocket:onMessage 未触发

不同的 WebSocket“onmessage”处理程序取决于屏幕

C# 创建 websocket - onmessage 函数不起作用

onMessage WebSocket 中的消息处理