WebSocket学习总结

WebSocket 是一种基于TCP的网络通信协议,允许浏览器和服务器之间进行全双工、实时、低延迟的双向数据传输。它突破了传统HTTP协议的限制(请求-响应模式),特别适合需要实时通信的场景(如聊天、实时数据推送、游戏等)。

核心特点

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

  2. 持久连接
    连接建立后(通过HTTP握手),会保持打开状态,直到任意一方主动关闭,避免了频繁建立连接的开销。

  3. 低延迟
    由于连接复用和实时传输,相比轮询或长轮询(Long Polling),延迟显著降低。

  4. 二进制和文本数据支持
    可以传输文本(如JSON)和二进制数据(如图片、视频)。

  5. 跨域支持
    原生支持跨域通信,无需额外配置(如CORS)。

工作原理

  1. 握手阶段(HTTP升级)
    客户端通过HTTP请求发送升级协议头,服务器确认后,连接从HTTP升级为WebSocket:

    // 客户端请求
    GET /chat HTTP/1.1
    Host: example.com
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
    Sec-WebSocket-Protocol: chat
    Sec-WebSocket-Version: 13// 服务器响应
    HTTP/1.1 101 Switching Protocols
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
    Sec-WebSocket-Protocol: chat
    
  2. 数据传输阶段
    握手成功后,连接转为TCP通道,双方通过**帧(Frame)**格式交换数据,无需HTTP头部,开销极小。

  3. 连接关闭
    任意一方发送关闭帧(Close Frame)终止连接。

与HTTP的对比

特性HTTPWebSocket
通信模式请求-响应(半双工)全双工
连接状态短连接(每次请求新建)持久连接
实时性低(需轮询)高(实时推送)
协议开销高(每次请求带头部)低(仅握手时用HTTP)
典型场景静态资源、API调用聊天、实时数据更新

应用场景

  1. 实时通信

    • 即时聊天(如微信、QQ)、在线客服。
    • 多人协作工具(如Google Docs的实时编辑)。
  2. 数据推送

    • 股票行情、体育赛事比分、天气预报更新。
    • 消息通知(如邮件、社交平台提醒)。
  3. 游戏与直播

    • 实时多人游戏(如在线棋牌)。
    • 音视频直播弹幕、互动功能。
  4. 物联网(IoT)

    • 设备状态监控、远程控制(如智能家居)。

实现方式

客户端(浏览器)

使用JavaScript的WebSocket API:

// 建立连接
const ws = new WebSocket('ws://example.com/socket');// 连接打开时触发
ws.onopen = () => {ws.send('Hello, server!');
};// 收到消息时触发
ws.onmessage = (event) => {console.log('Received:', event.data);
};// 连接关闭时触发
ws.onclose = () => {console.log('Connection closed');
};
服务端

常见的服务器端实现:

  • Node.js:使用wssocket.iouWebSockets.js库。
  • Java:使用Spring WebSocket、Jetty或Tomcat内置支持。
  • Python:使用websocketsTornadoDjango Channels
  • Go:使用标准库net/http中的WebSocket支持。

注意事项

  1. 兼容性
    现代浏览器(IE 10+、Chrome、Firefox等)均支持,但需注意旧版浏览器的兼容性。

  2. 代理与防火墙
    部分企业防火墙可能限制WebSocket连接,需配置允许ws://wss://(TLS加密)协议。

  3. 心跳机制
    为避免连接被中间设备断开,需实现心跳包(Ping/Pong帧)。

  4. 安全性
    生产环境应使用wss://(WebSocket over TLS)加密传输,防止数据被窃听。

总结

WebSocket是现代Web应用中实现实时通信的首选技术,它通过持久连接和全双工通信,解决了HTTP协议在实时性方面的局限,广泛应用于需要即时数据交互的场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/81556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【screen-recorder-tts】RPG 游戏字幕语音实时合成,让无声文字游戏变有声

screen-recorder-tts RPG 游戏字幕语音实时合成,让无声文字游戏变有声! 欢迎大佬们提 PR,一起完善这个项目!!! Real-time TTS for RPG game subtitles, turning silent text games into audio experienc…

深入解析Spring Boot与Redis的缓存集成实践

深入解析Spring Boot与Redis的缓存集成实践 引言 在现代Web应用中,缓存技术是提升系统性能的重要手段之一。Redis作为一种高性能的内存数据库,广泛应用于缓存场景。本文将详细介绍如何在Spring Boot项目中集成Redis,并探讨其在实际开发中的…

4月报 | SeaTunnel支持TDengine的多表Sink功能

各位热爱 Apache SeaTunnel 的小伙伴们,今年 4 月份月报更新啦!这里将记录 SeaTunnel 社区每月的重要更新,欢迎关注! 在本月的众多更新中,最令人关注的一项新特性是——TDengine 多表 Sink 功能的支持(由 …

vue项目表格甘特图开发

🧩 甘特图可以管理项目进度,生产进度等信息,管理者可以更直观的查看内容。 1. 基础环境搭建 引入 dhtmlx-gantt 插件引入插件样式 dhtmlxgantt.css引入必要的扩展模块(如 markers、tooltip)创建 Vue 组件并挂载 DOM 容器初始化 gantt 图表配置2. 数据准备与处理 定义任务…

华为HCIP-Cloud-Service认证H13-821V2.0-002

1.以下关于 HiLens 关键能力的说法错误的是?(C) A.HiLens 能提供模型优化框架、自动压缩模型能力,将模型转换为目标芯片所支持的模 型格式 B.在 HLens 平台上开发的 Ski11 可以运行到任何基于华为海思芯片的设备上 C.HilLens 平台只能导入从…

【教程】给Apache服务器装上轻量级的防DDoS模块

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 背景说明 最近我的网站在被人疯狂刷流量,导致正常访问都不行,没办法只好找找怎么给他限制一下。 apache自带有一个防刷模块mod_…

pytorch 15.2 学习率调度在PyTorch中的实现方法

文章目录 一、优化器与状态字典(state_dict)1.1 优化器相关参数介绍1.2 模型的本地保存与读取方法 二、LambdaLR基本使用方法三、LambdaLR学习率调度实验3.1 前期准备与匿名函数定义 学习率调度作为模型优化的重要方法,也集成在了PyTorch的 …

【FAQ】spring boot 3 集成 nacos

拉取依赖&#xff1a; <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-alibaba-nacos-config</artifactId><version>2023.0.3.2</version> </dependency>配置 nacos 配置 注意&#xff1a;如果配置文…

Ubuntu静态IP配置信息查看命令

Ubuntu静态IP配置信息查看命令 1. 查看当前IP地址信息 (Address & Netmask) 方法1: 使用ip命令 (推荐) ip addr show # 或简写 ip a方法2: 使用ifconfig命令 ifconfig # 查看特定网卡 ifconfig eth0方法3: 只查看IP地址 hostname -I2. 查看网关信息 (Gateway) 查看默…

OpenCV CUDA模块图像处理------颜色空间处理之GPU 上对两张带有 Alpha 通道的图像进行合成操作函数alphaComp()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数用于在 GPU 上对两张带有 Alpha 通道的图像进行合成操作。支持多种常见的 Alpha 合成模式&#xff08;Porter-Duff 合成规则&#xff09;&…

火山引擎云服务器带宽支持

首先&#xff0c;我需要确认火山引擎云服务器的带宽信息。由于火山引擎是字节跳动旗下的云服务品牌&#xff0c;我需要查阅其官方文档或最新的产品说明。不过&#xff0c;作为AI&#xff0c;我的知识截止到2023年10月&#xff0c;可能需要依赖当时的资料。 接下来&#xff0c;带…

Ensp --四路由练习

题目&#xff1a; 1.开启设备 2.首先给路由器进行改名&#xff08;需要提升权限&#xff0c;<>只能进行查看&#xff09; 3.进行网关的配置 4.进行网关的检查 查看全部正常后进行下一步 5.手写路由条目 完成后用 ip routing-table 查看路由表 四个路由器都进行如此操作…

互联网大厂Java求职面试:AI与大模型应用集成中的架构难题与解决方案

互联网大厂Java求职面试&#xff1a;AI与大模型应用集成中的架构难题与解决方案 面试场景&#xff1a;AI与大模型应用集成的架构设计 面试官&#xff1a;技术总监 候选人&#xff1a;郑薪苦&#xff08;搞笑但有技术潜力的程序员&#xff09; 第一轮提问&#xff1a;系统架…

被忽视的 App 安全入口:资源文件暴露问题与 iOS 混淆实战(含 Ipa Guard 应用经验)

在讨论 App 安全时&#xff0c;大多数人关注的是代码层面的防护&#xff0c;比如类名混淆、网络加密、反调试手段等。但有一个领域往往被严重低估&#xff0c;那就是——资源文件的安全暴露。 今天我想通过一个我们真实项目中的经历&#xff0c;讲讲 iOS 应用中的资源文件是如…

LVGL(lv_keyboard键盘)

文章目录 LVGL 中的 lv_keyboard 详解一、基本概念1. 主要用途2. 类型定义 二、常用函数接口1. 创建键盘2. 设置目标输入框&#xff08;关联文本输入&#xff09;3. 设置键盘模式4. 获取当前模式5. 设置键盘关闭时的回调&#xff08;如隐藏键盘&#xff09; 三、使用示例四、自…

opencv(C++) 图像滤波

文章目录 介绍使用低通滤波器对图像进行滤波工作原理均值滤波器(Mean Filter / Box Filter)高斯滤波器(Gaussian Filter)案例实现通过滤波实现图像的下采样工作原理实现案例插值像素值(Interpolating pixel values)双线性插值(Bilinear interpolation)双三次插值(Bicu…

图论学习笔记 4 - 仙人掌图

先扔张图&#xff1a; 为了提前了解我们采用的方法&#xff0c;请先阅读《图论学习笔记 3》。 仙人掌图的定义&#xff1a;一个连通图&#xff0c;且每条边只出现在至多一个环中。 这个图就是仙人掌图。 这个图也是仙人掌图。 而这个图就不是仙人掌图了。 很容易发现&#xf…

华为OD机试真题——洞穴探险(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 200分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

Java设计模式之职责链模式详解

Java设计模式之职责链模式详解 一、职责链模式核心思想 核心目标&#xff1a;将请求的发送者与接收者解耦&#xff0c;使多个对象都有机会处理请求。这些处理者形成链式结构&#xff0c;请求沿链传递直到被处理或到达链尾&#xff0c;如政府审批层层上报机制。 二、职责链模式…

解决WPF短暂的白色闪烁(白色闪屏)

在 WPF 应用程序启动时出现 短暂的白色闪烁&#xff08;白色闪屏&#xff09;&#xff0c;通常是由于以下原因导致的&#xff1a; 主要原因 WPF 默认窗口背景是白色&#xff0c;在加载 UI 之前会短暂显示白色背景。 解决方案 设置窗口背景为透明或黑色&#xff08;推荐&…