WebSocket是JavaScript实现实时通信最常用方式,基于单个TCP连接实现全双工、低延迟双向通信;需监听onopen、onmessage、onerror、onclose事件,用JSON收发结构化数据,并手动实现带重试限制的自动重连,注意wss://与HTTPS匹配及跨域服务端校验。
JavaScript 实现实时通信,最常用、最直接的方式就是使用 WebSocket。它是一种在单个 TCP 连接上进行全双工通信的协议,能让浏览器与服务器之间建立持久连接,实现低延迟、双向、实时的数据交换。
创建 WebSocket 连接非常简单,核心是实例化 WebSocket 对象,并监听关键事件:
onopen,连接成功后可立即发送数据onmessage,服务端推送的数据会在这里触发onerror,处理网络中断或协议错误onclose,可在此做清理或重连逻辑示例代码:
const ws = new WebSocket('wss://example.com/chat');
ws.onopen = () => {
console.log('已连接');
ws.send(JSON.stringify({ type: 'join', user: 'Alice' }));
};
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log('收到消息:', data);
};
ws.onerror = (error) => {
console.error('WebSocket 错误:', error);
};
ws.onclose = () => {
console.log('连接已关闭');
};
WebSocket 本身只收发字符串或 ArrayBuffer,实际项目中建议统一用 JSON 格式通信,便于前后端解析:
JSON.stringify() 序列化对象JSON.parse() 解析字符串type 字段区分业务类型(如 'message'、'typing'、'online-list')WebSocket 并不自带重连机制,需手动实现。常见做法是:
onclose 或 onerror 中设置延时重试(避免频繁请求)ws.readyState,避免重复连接(0=CONNECTING, 1=OPEN, 2=CLOSING, 3=CLOSED)WebSocket 协议不受同源策略限制,但浏览器仍要求页面协议与 WebSocket 协议匹配:
ws://(开发环境可临时使用,生产不推荐)wss://(加密 WebSocket,等价于 HTTPS 之于 HTTP)Sec-WebSocket-Origin 已废弃,现代浏览器主要依赖服务端校验 Origin)
# javascript
# java
# js
# json
# 浏览器
# 端口
# websocket
# 后端
# 跨域
# 开发环境
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
mac怎么安装pip_MAC Python pip安装工具与升级方法【详解】
Win11如何更新显卡驱动 Win11检查和安装设备驱动程序【方法】
Windows系统被恶意软件破坏后的恢复策略_错误提示修复方式
如何在网页无标准表格标签时高效提取结构化数据
Python 模块的 __name__ 属性如何由导入方式决定?
如何使用Golang开发基础文件下载功能_Golang HTTP文件响应与缓存实现
Win11开机Logo怎么换_Win11自定义启动画面工具【高级】
Python邮件系统自动化教程_批量发送解析与模板应用
Win11如何设置文件权限 Win11 NTFS文件夹所有权与安全设置【高级】
Win10系统字体模糊怎么办_Windows10高级缩放设置修复
Python装饰器复用技巧_通用能力解析【教程】
如何解决同一段404代码在不同主机上表现不一致的问题
c# Task.ConfigureAwait(true) 在什么场景下是必须的
Win11如何连接Xbox手柄 Win11蓝牙连接游戏手柄教程【步骤】
本地php环境打开php文件直接下载_浏览器解析php为下载的修复方法【解答】
php删除数据怎么软删除_添加is_del字段标记删除【技巧】
php485在macos下怎么配置_php485 macOS系统配置指南【解答】
mac怎么看硬盘大小_MAC查看磁盘存储空间与文件占用【详解】
c++中的可变参数模板(variadic templates)怎么用_c++模板编程黑魔法【C++11】
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
Drupal 中 HTML 链接被重复转义导致渲染异常的解决方案
Win10怎样卸载iTunes_Win10卸载iTunes步骤【步骤】
Win11怎么设置系统还原_Windows11系统属性保护设置
LINUX的SELinux是什么_详解LINUX强制访问控制系统的入门与配置
Mac怎么设置鼠标滚动速度_Mac鼠标设置详细参数
c++中的std::conjunction和std::disjunction是什么_c++模板元编程逻辑运算【C++17】
windows如何修改文件默认打开方式_windows设置程序关联教程
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
如何在 ACF 中正确更新嵌套多层的 Group 字段子字段
Windows10系统怎么查看防火墙状态_Win10安全中心网络保护
Go语言中正确反序列化多个同级XML元素为结构体切片的方法
如何提升Golang程序I/O性能_Golang I/O密集型程序优化示例
Windows如何查看和管理已安装的字体?(字体文件夹)
Win11怎么格式化U盘_Win11系统U盘格式化与文件系统选择【教程】
Windows10系统怎么查看IP地址_Win10网络连接状态详细信息
Win10电脑怎么设置IP地址_Windows10网络属性固定IP配置
如何在 PHP 单元测试中正确模拟带方法的图像处理门面(Facade)
Mac如何设置动态壁纸?(让桌面动起来)
Win11怎么打开注册表_Windows 11注册表编辑器启动命令【步骤】
Win11怎么关闭触控板_Win11笔记本禁用触摸板快捷键
mac怎么打开终端_MAC终端Terminal使用入门与常用命令【教程】
Win11怎么清理C盘虚拟内存_Win11清理虚拟内存设置【教程】
Win11怎么关闭透明效果_Windows11个性化颜色关闭透明
Win11开始菜单打不开_修复Windows 11点击开始图标无响应【教程】
Windows怎样关闭锁屏广告_Windows关闭锁屏广告方法【教程】
Win11如何开启系统更新 Win11开启系统更新方法【步骤】
Python代码测试策略_质量保障解析【教程】
mac本地php环境如何开启curl_curl扩展启用与测试步骤详解【汇总】
如何在Golang中编写端到端测试_Golang E2E测试流程示例
Win11如何卸载OneDrive_Win11卸载OneDrive方法【教程】
2026-01-01
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。