首页 > web前端 > js教程 > 正文

JavaScript WebSocket实时通信

夢幻星辰
发布: 2025-11-04 19:28:02
原创
598人浏览过
WebSocket 可实现浏览器与服务器全双工通信,通过 new WebSocket('ws://...') 建立连接,onopen 触发后可用 send() 发送数据、onmessage 接收消息,支持 JSON 格式,close() 关闭连接并由 onclose 处理关闭事件,readyState 表示连接状态,生产环境推荐使用 wss、添加重连机制、控制消息频率、验证数据并及时清理连接。

javascript websocket实时通信

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,相比传统的 HTTP 轮询,它能实现真正的实时数据交互。在 JavaScript 中使用 WebSocket 可以轻松构建聊天应用、实时通知、在线协作工具等需要即时通信的功能。

创建 WebSocket 连接

要建立 WebSocket 连接,只需实例化一个 WebSocket 对象,并传入服务器的 ws 或 wss(加密)地址:

const socket = new WebSocket('ws://localhost:8080');

socket.onopen = function(event) {
  console.log('连接已建立');
};

socket.onerror = function(error) {
  console.error('连接出错:', error);
};
登录后复制

连接成功后会触发 onopen 事件,之后就可以收发数据了。

发送与接收消息

通过 send() 方法向服务器发送数据,通常为字符串或 JSON 格式:

立即学习Java免费学习笔记(深入)”;

socket.send(JSON.stringify({
  type: 'message',
  content: '你好,服务器!'
}));
登录后复制

使用 onmessage 监听来自服务器的消息:

ViiTor实时翻译
ViiTor实时翻译

AI实时多语言翻译专家!强大的语音识别、AR翻译功能。

ViiTor实时翻译 116
查看详情 ViiTor实时翻译
socket.onmessage = function(event) {
  const data = JSON.parse(event.data);
  console.log('收到消息:', data);
};
</font>
登录后复制

event.data 是服务器发送的内容,可以是字符串、Blob 或 ArrayBuffer,常见的是字符串形式的 JSON 数据。

关闭连接与状态管理

可调用 close() 主动关闭连接:

socket.close();
登录后复制

通过 onclose 处理连接关闭事件:

socket.onclose = function(event) {
  if (event.wasClean) {
    console.log(`连接关闭,代码=${event.code} 原因=${event.reason}`);
  } else {
    console.warn('连接意外断开');
  }
};
</font>
登录后复制

可通过 socket.readyState 检查当前连接状态:

  • 0: CONNECTING(连接中)
  • 1: OPEN(已打开)
  • 2: CLOSING(关闭中)
  • 3: CLOSED(已关闭)

实际使用建议

在生产环境中使用 WebSocket 时需要注意几点:

  • 使用 wss:// 提供加密传输,保障数据安全
  • 添加重连机制,网络中断后自动尝试恢复连接
  • 控制消息频率,避免频繁 send 导致性能问题
  • 合理解析和验证收到的数据结构,防止异常
  • 在组件卸载时关闭连接,防止内存泄漏(如 React 中的 useEffect cleanup)
基本上就这些。WebSocket 让前端能与后端保持长连接,实现低延迟通信,掌握它的基本用法对开发实时功能非常有帮助。

以上就是JavaScript WebSocket实时通信的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号