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

WebSocket 是什么?

好记忆不如烂笔头,能记下点东西,就记下点,有时间拿出来看看,也会发觉不一样的感受.

WebSocket 是一种基于 TCP 协议的全双工通信协议,用于在客户端(如浏览器)和服务器之间建立持久化的双向实时通信通道。与传统的 HTTP 协议不同,WebSocket 允许服务器主动向客户端推送数据,解决了 HTTP 单向请求-响应模式的局限性,非常适合需要低延迟和高实时性的应用场景。

目录

一、WebSocket 的核心特点

二、WebSocket 的工作原理

三、常见应用场景

四、WebSocket 安全问题

五、示例代码(JavaScript 客户端)

六、总结


一、WebSocket 的核心特点

  1. 全双工通信
    客户端和服务器可以同时发送和接收数据,无需等待对方的请求。

    对比:HTTP 是半双工,客户端必须主动发起请求,服务器才能响应。
  2. 持久化连接
    建立连接后,通信通道会一直保持打开状态(直到主动关闭),避免了 HTTP 频繁建立/断开连接的开销。

  3. 低延迟
    数据以轻量级的帧(Frame)传输,减少协议头部的冗余信息,适合高频次、小数据量的场景。

  4. 基于 HTTP 握手
    WebSocket 通过一次 HTTP 握手升级协议(Upgrade: websocket),将连接从 HTTP 切换到 WebSocket 协议(状态码 101 Switching Protocols)。

  5. 支持跨域通信
    可通过 CORS(跨域资源共享)机制实现跨域连接。


二、WebSocket 的工作原理

  1. 握手阶段

    • 客户端发起一个 HTTP 请求,包含 Upgrade: websocket 和 Connection: Upgrade 头部。

    • 服务器返回 101 Switching Protocols 响应,确认协议升级。

    • 后续通信使用 WebSocket 协议(基于二进制帧传输数据)。

  2. 数据传输

    • 数据以帧(Frame)为单位传输,支持文本(UTF-8)和二进制格式。

    • 每个帧包含掩码(客户端到服务器的帧必须掩码)和分帧(大数据分块传输)信息。


三、常见应用场景

  • 实时聊天应用:如在线客服、群聊(消息实时推送)。

  • 协同编辑工具:多用户同时编辑文档(实时同步内容)。

  • 实时游戏:多玩家在线游戏的状态同步。

  • 股票行情推送:实时更新价格、交易量。

  • 物联网(IoT):设备状态监控与指令下发。


 

四、WebSocket 安全问题

  1. 加密通信
    使用 wss://(WebSocket Secure)协议,基于 TLS/SSL 加密(类似 HTTPS)。

  2. 输入验证
    需防范恶意数据注入(如 WebSocket 消息中的 XSS 攻击)。

  3. 连接限制
    控制并发连接数,防止 DDoS 攻击。

五、示例代码(JavaScript 客户端)

// 创建 WebSocket 连接
const socket = new WebSocket('wss://example.com/socket');// 监听连接建立
socket.onopen = () => {socket.send('Hello Server!');
};// 监听服务器消息
socket.onmessage = (event) => {console.log('Received:', event.data);
};// 监听错误或关闭
socket.onclose = () => {console.log('Connection closed');
};

六、总结

WebSocket 是构建实时应用的理想选择,它通过持久化、双向、低开销的通信机制,解决了传统 HTTP 在实时性上的不足。对于需要频繁数据交换的场景(如聊天、游戏、实时监控),WebSocket 能显著提升性能和用户体验。

关注我,带你了解更多IT知识
搜索:codingba 或 “码出精彩” ,和我一起探讨软件研发的那些事。

相关文章:

  • Canvas进阶篇:鼠标交互动画
  • RISC-V 开发板 MUSE Pi Pro CSI测试,一把点亮ov5647摄像头
  • QMK固件RGB矩阵照明功能详解 - 打造你的专属炫彩键盘
  • DevExpress Blazor中文教程 - 如何用AI聊天组件构建大型语言模型聊天APP?
  • python爬虫和逆向:百度翻译数据采集的几种方式
  • 使用Terraform创建azure databrick
  • 【低代码】如何使用明道云调用 Flask 视图函数并传参(POST 方法实践)
  • 【Linux我做主】探秘进程与fork
  • 基于MDX的在线编译文档方案
  • 自制操作系统day6(GDTR、段描述符、PIC、实模式和保护模式、16位到32位切换、中断处理程序、idt的设定、EFLAG寄存器)(ai辅助整理)
  • STM32 I2C硬件读写
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Hidden Search Widget (交互式搜索框)
  • 拉普拉斯高斯(LoG)滤波器掩模的注意事项
  • vue3 + vite 使用tailwindcss
  • 关于收集 Android Telephony 网络信息的设计思考2
  • Git 提交大文件 this exceeds GitHub‘s file size limit of 100.00 MB
  • 【WebRTC】源码更改麦克风权限
  • windows服务器部署jenkins工具(二)
  • npm、pnpm、yarn 各自优劣深度剖析
  • DeepSeek赋能智能家居:构建高智能、低延迟的物联网生态
  • 长沙专业做网站的公司/浏览器下载
  • 个人网页设计首页/优化seo可以从以下几个方面进行
  • 沈阳网站建设招标公司/青岛网站快速排名提升
  • 动态h5网站开发/seo服务内容
  • wp可以做商城网站吗/近三天时政热点
  • 做网站开发需要学哪些东西/seo快速整站上排名教程