WebSocket需设binaryType="arraybuffer"才能直接收发ArrayBuffer;接收后可用Uint8Array或DataView处理,发送时直接传ArrayBuffer或TypedArray;须检查连接状态并处理错误。

WebSocket 默认支持二进制数据,但需显式设置 binaryType 并正确处理 ArrayBuffer。
设置 binaryType 为 "arraybuffer"
创建 WebSocket 实例后,必须在监听消息前将 binaryType 设为 "arraybuffer",否则收到的二进制数据会是 Blob 类型(需额外读取),无法直接操作 ArrayBuffer:
ws.binaryType = "arraybuffer";- 该设置应在
ws.onopen后、ws.onmessage前完成 - 若未设置,
event.data可能是 Blob 或字符串,不是 ArrayBuffer
接收 ArrayBuffer 并转换为可用格式
在 onmessage 回调中,event.data 就是原始 ArrayBuffer,可按需转为 TypedArray 或 DataView:
- 用
new Uint8Array(event.data)获取字节视图,适合逐字节处理或拷贝 - 用
new DataView(event.data)读取结构化数据(如 int32、float64),注意字节序 - 若需字符串,先转 Uint8Array 再用
TextDecoder解码:new TextDecoder().decode(uint8Arr)
发送 ArrayBuffer 数据
发送 ArrayBuffer 很简单,直接传入 ws.send() 即可:
立即学习“Java免费学习笔记(深入)”;
-
ws.send(arrayBuffer);—— 支持 ArrayBuffer、TypedArray、DataView - 若用
Uint8Array发送,底层自动提取 buffer,等价于ws.send(uint8Arr.buffer) - 避免直接 send 字符串或普通对象;二进制场景应构造好 ArrayBuffer 再发
注意连接状态与错误边界
二进制传输对网络和内存更敏感,需加强健壮性处理:
- 发送前检查
ws.readyState === WebSocket.OPEN - 监听
onerror和onclose,避免向已关闭连接发 ArrayBuffer 导致静默失败 - 大 ArrayBuffer 可能触发内存压力,考虑分片发送或使用
SharedArrayBuffer(需跨域策略支持)


















