send()方法发送字符串需确保readystate为1(open),否则报错;仅支持字符串,json需stringify;中文默认utf-8兼容。

直接用 send() 方法发送字符串即可,但必须确保连接已建立(readyState === 1),否则会报错或静默失败。
发送前确认连接状态
WebSocket 连接是异步建立的,不能一创建实例就立刻发消息。要在 onopen 回调里发送,或手动检查 readyState:
-
socket.readyState === WebSocket.OPEN(即数值 1)才安全调用send() - 若状态为
CONNECTING(0)就调用send(),浏览器会抛出InvalidStateError - 可加简单防护:
if (socket.readyState === WebSocket.OPEN) socket.send('hi');
支持的文本数据类型
send() 接收纯字符串(USVString),其他类型需转换:
- 普通文本:直接传入,如
socket.send('login') - JSON 数据:必须先用
JSON.stringify()转成字符串,如socket.send(JSON.stringify({ type: 'msg', text: 'ok' })) - 不支持对象、数组、数字等原始值——传入会自动调用
.toString(),导致意外结果(比如{a:1}变成[object Object])
常见使用场景示例
实际开发中,文本消息多用于轻量指令或结构化通信:
- 用户上线通知:
socket.send('USER_ONLINE:alice') - 聊天消息(带格式):
socket.send('[CHAT] Alice: Hello!') - 心跳保活:
socket.send('PING'),服务端响应PONG - 登录凭证(建议加密后传):
socket.send(JSON.stringify({ token: 'xxx', ts: Date.now() }))
注意编码与中文兼容性
WebSocket 默认使用 UTF-8 编码,中文字符串可直接发送,无需额外处理:
- ✅ 正确:
socket.send('你好,服务器!') - ⚠️ 避免混用编码(如手动 Base64 或 escape),除非服务端明确要求
- 若遇到乱码,优先排查服务端是否按 UTF-8 解析,而非前端编码问题
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











