信息发布→ 登录 注册 退出

如何用javascript实现实时通信_WebSocket基础是什么?

发布时间:2025-12-16

点击量:
WebSocket是一种基于单个TCP连接的全双工通信协议,支持浏览器与服务器持续连接并互相主动发消息,适用于聊天、实时通知等场景;其通过HTTP Upgrade握手建立长连接,区别于HTTP的请求-响应模式;前端使用new WebSocket()创建连接,监听open、message、close、error事件,并用send()发送数据;后端需配套WebSocket服务(如Node.js的ws库、Python的websockets等)来处理连接管理、广播与鉴权。

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它让浏览器和服务器之间可以**持续保持连接、互相主动发消息**,不像传统 HTTP 那样每次请求都要重新握手。这是实现实时通信(比如聊天、协作编辑、实时通知)最常用、最直接的方式。

WebSocket 和 HTTP 的关键区别

HTTP 是“请求-响应”模型:浏览器发一次请求,服务器回一次响应,连接就断了。想获取新数据?只能不断轮询(定时发请求),效率低、延迟高、浪费资源。

WebSocket 是“长连接”模型:客户端和服务器只在建立连接时走一次 HTTP 升级(Upgrade)握手,之后就切换到 WebSocket 协议,双方随时可发消息,没有请求/响应的束缚。

前端怎么用 JavaScript 创建 WebSocket 连接

浏览器原生支持 WebSocket 构造函数,使用非常简洁:

  • new WebSocket(url) 初始化连接,url 必须是 ws:// 或加密的 wss://(类似 http/https)
  • 监听 open 事件表示连接成功,可以开始发送消息
  • 监听 message 事件接收服务器推送的数据
  • 调用 send() 方法向服务端发字符串或 ArrayBuffer(注意:不支持直接发对象,需 JSON.stringify)
  • 监听 closeerror 做异常处理和重连逻辑(实际项目中建议加自动重连)

一个最小可用示例

假设后端 WebSocket 服务运行在 ws://localhost:8080

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

ws.onopen = () => {
  console.log('已连接');
  ws.send(JSON.stringify({ type: 'login', user: 'Alice' }));
};

ws.onmessage = (event) => {
  const data = JSON.parse(event.data);
  console.log('收到消息:', data);
};

ws.onclose = () => console.log('连接已关闭');
ws.onerror = (err) => console.error('连接出错:', err);

后端不能少:需要配套的 WebSocket 服务

前端只是半边腿。WebSocket 要真正工作,必须有支持 WebSocket 协议的服务端,比如:

  • Node.js 可用 ws 库(轻量、主流)或 Socket.IO(功能更全,自带降级兼容)
  • Python 可用 websocketsFastAPI + websockets
  • Java 可用 Spring WebFlux 或 Jetty 的 WebSocket 支持

服务端要处理连接管理、广播、鉴权、心跳保活等——这些前端不用管,但开发前得确认后端已准备好对应接口和路径。

基本上就这些。WebSocket 本身不复杂,但容易忽略连接状态管理、错误重试和消息序列化细节。先跑通连接和收发字符串,再逐步加业务逻辑,就很稳了。

标签:# javascript  # python  # java  # js  # 前端  # node.js  # json  # node  # 浏览器  # websocket  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!