当前位置: 首页 > article >正文

WebSocket 入门详解

开发领域:前端开发 | AI 应用 | Web3D | 元宇宙
技术栈:JavaScript、React、Three.js、WebGL、Go
经验经验:6年+ 前端开发经验,专注于图形渲染和AI技术
开源项目:智简未来 晓智元宇宙、数字孪生引擎
大家好!我是 [晓智],一位热爱探索新技术的前端开发者,在这里分享前端和Web3D、AI技术的干货与实战经验。如果你对技术有热情,欢迎关注我的文章,我们一起成长、进步!

什么是 WebSocket?

WebSocket 是一种在单个 TCP 连接上提供全双工通信的协议。它由 IETF 于 2011 年标准化,被广泛应用于实时应用程序中,例如在线聊天、游戏、股票行情更新等。

相比于传统的 HTTP 请求-响应模式,WebSocket 具有以下特点:

  1. 全双工通信:客户端和服务器可以随时互相发送消息。
  2. 低延迟:由于协议头部较小且无需频繁建立连接,通信效率更高。
  3. 状态保持:WebSocket 连接一旦建立,可以长期保持,避免了 HTTP 的无状态性问题。

WebSocket 的工作原理

  1. 握手阶段

    • WebSocket 连接始于客户端通过 HTTP 向服务器发起的 WebSocket 握手请求。
    • 请求包含 UpgradeConnection 头部,用于标识升级协议。
    • 服务器接受请求后,会返回 101 Switching Protocols 响应码,完成协议切换。
  2. 通信阶段

    • 握手成功后,客户端和服务器之间建立一个持续的双向通信通道。
    • 数据通过帧(frames)的形式传输,帧头部较小,效率高。

WebSocket 与 HTTP 的区别

特性WebSocketHTTP
协议类型全双工半双工
连接保持长连接每次请求需要新连接
消息方向双向通信单向通信(请求-响应)
头部大小小(适合频繁通信)大(适合偶发性通信)
应用场景实时应用(聊天、游戏等)静态资源获取

如何使用 WebSocket?

以下是一个简单的 WebSocket 示例:

安装 websocket 包

pnpm i websocket

客户端代码

// 0 链接还没有建立
// 1 链接建立
// 2 链接正在关闭
// 3 链接已关闭
const websocket = new WebSocket('ws://localhost:8080/');

websocket.onopen = function () {
  console.log(websocket.readyState);
};

const btn = document.getElementById('btn');
btn.addEventListener('click', () => {
  const value = document.getElementById('text').value;
  websocket.send(value);
});

websocket.onmessage = function (msg) {
  console.log(msg.data);
};

服务端代码(Node.js 示例)

const WebSocketServer = require('websocket').server;
const http = require('http');

const server = http.createServer(function (request, response) {
  response.writeHead(404);
  response.end();
});

server.listen(8080, function () {
  console.log('server run in 8080');
});

const wsServer = new WebSocketServer({
  httpServer: server,
  autoAcceptConnections: false,
});

wsServer.on('request', function (request) {
  const connection = request.accept();
  connection.on('message', function (msg) {
    connection.send(msg.utf8Data + 'world');
  });
});

应用场景

  1. 在线聊天:如即时通讯工具、聊天室。
  2. 实时数据推送:如股票行情、体育比分。
  3. 多人游戏:如在线实时对战游戏。
  4. 物联网:如设备状态监控、实时数据采集。

WebSocket 的优势与局限

优势
  1. 实时性强:适合对低延迟和高频数据更新有需求的应用。
  2. 高效通信:相比 HTTP 请求,数据传输更高效。
  3. 持续连接:减少了频繁建立和断开连接的开销。
局限
  1. 浏览器兼容性:较老版本的浏览器可能不支持 WebSocket。
  2. 复杂性:需要更多的开发和运维工作,比如连接管理和安全性保障。
  3. 防火墙限制:部分防火墙可能阻止 WebSocket 连接。

总结

WebSocket 为实时通信提供了一个高效的解决方案,广泛应用于各种需要低延迟、双向数据传输的场景。虽然它存在一些局限性,但通过合理的架构设计和技术选型,可以充分发挥其优势,为用户带来更优质的体验。

关注作者

在这里插入图片描述


http://www.kler.cn/a/461214.html

相关文章:

  • 头歌实训数据结构与算法 - 字符串匹配(第2关:实现KMP字符串匹配)
  • 【开源免费】基于SpringBoot+Vue.JS保密信息学科平台(JAVA毕业设计)
  • P5289 [十二省联考 2019] 皮配 做题记录
  • 网络分析工具-tcpdump
  • 2024/12/29 黄冈师范学院计算机学院网络工程《路由期末复习作业一》
  • Postman[8] 断言
  • 【每日学点鸿蒙知识】Taro、native层获取文件宽度、位置变化callback、数据迁移、oh_modules说明等
  • QT--多线程
  • 深入浅出 Spring (二)| 依赖注入(DI)、自动装配
  • 课程思政元素收集系统|Java|SSM|JSP|
  • 计算机网络基础知识(7)中科大郑铨老师笔记
  • 【视觉SLAM:四、相机与图像】
  • 公交智眼 4G 录像机:开启安全运营新篇章
  • spring中常见的自动注入方式
  • 论文实现:Reactive Nonholonomic Trajectory Generation via Parametric Optimal Control
  • Vue3 简介
  • C++初步认识函数
  • @RestControllerAdvice注解
  • OneOS操作系统入门-驱动-03:I2C总线及驱动
  • java实现excel导入参考资料合集
  • Zookeeper在中间件的应用和在Spring Boot业务系统中实现分布式锁和注册中心的解决方案
  • CT 扫描显示 USB-C 电缆可能隐藏复杂的恶意硬件
  • 强化学习方法分类详解
  • 电脑cxcore.dll文件缺失怎么办?cxcore100.dll缺失问题解决办法
  • svn不能添加.a文件
  • 从零开发一套UWB定位系统需要多长时间?UWB超宽带定位系统源码