WebSocket支持发送文本(字符串)和二进制数据(ArrayBuffer、Blob等),需设置binaryType影响接收格式,发送前须确保连接状态为OPEN,调试可借助开发者工具查看帧类型。

WebSocket 支持直接发送二进制数据(如 ArrayBuffer、Blob、TypedArray)和文本消息(字符串),关键在于设置 binaryType 并正确构造数据。
发送文本消息:直接传字符串
默认情况下,WebSocket 的 send() 方法接收字符串时自动按 UTF-8 编码为文本帧:
- 无需额外配置,直接调用
ws.send("hello") - 服务端收到的是标准文本帧(opcode = 1)
- 注意:若字符串含特殊 Unicode 字符(如 emoji),浏览器会自动处理编码,无需手动转码
发送二进制数据:选择合适类型并设置 binaryType
binaryType 决定接收到的二进制数据以何种对象形式暴露(不影响发送),但发送时需主动构造二进制载体:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 推荐使用
ArrayBuffer或Uint8Array:兼容性好、内存可控 - 示例发送 4 字节整数:
const buf = new ArrayBuffer(4);<br> const view = new DataView(buf);<br> view.setUint32(0, 123456, false); // 大端序<br> ws.send(buf);
- 也可发送
Blob(适合文件片段):const blob = new Blob([new Uint8Array([1, 2, 3, 4])]);<br> ws.send(blob);
- 避免直接传普通数组(如
[1,2,3]),它会被转为字符串再发送
区分接收端的数据类型
虽然发送方式不同,但接收时需靠 binaryType 判断格式:
立即学习“Java免费学习笔记(深入)”;
- 设
ws.binaryType = "arraybuffer"→message.data是ArrayBuffer - 设
ws.binaryType = "blob"→message.data是Blob - 文本消息始终是
string,与binaryType无关 - 可通过
event.data instanceof ArrayBuffer或typeof event.data === "string"主动判断
注意事项与常见问题
实际使用中容易忽略的细节:
- 确保 WebSocket 已连接(
ws.readyState === WebSocket.OPEN)再发送,否则报错 - 发送大块二进制数据前可先分片(尤其在低带宽环境),服务端需支持拼接逻辑
- Node.js 的
ws库默认将字符串视为文本,ArrayBuffer视为二进制;其他后端框架(如 Python 的websockets)行为类似,无需额外标记 - 调试时可用浏览器开发者工具的 Network → WS → Frames 查看帧类型(text / binary)和载荷内容

















