WebSocket学习记录

news/2025/2/12 3:49:17/

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、什么是WebSocket
  • 二、为什么需要WebSocket
  • 三、WebSocket的工作原理
  • 四、如何使用WebSocket
  • 总结


前言

本文旨在深入探讨WebSocket协议的基础知识、工作原理以及在实际开发中的应用场景。通过本文的学习,读者将对WebSocket有一个全面的理解,并能将其应用于自己的项目中。

一、什么是WebSocket

WebSocket是一种在单个TCP连接上进行全双工通信的协议。它使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。WebSocket API是纯事件驱动,通过监听事件可以处理到来的数据和改变的链接状态。

二、为什么需要WebSocket

传统的HTTP协议无法支持服务器主动发送信息给客户端,这导致了轮询(Polling)和长轮询(Long Polling)等技术的出现,但这些方法效率低下且实时性不高。而WebSocket解决了这些问题,提供了更高效的双向通信机制。

主要优势包括:

  • 带宽优化:相比于HTTP,WebSocket的头部信息更加简洁。
  • 低延迟:WebSocket能够实现更低的延迟,适合实时性要求高的场景。
  • 无状态保持:与HTTP不同,WebSocket可以维持一个持久的连接状态。

三、WebSocket的工作原理

WebSocket的通信始于一次HTTP握手请求,随后升级为WebSocket协议。一旦握手成功,双方即可通过该连接进行数据交互,无需再次发起新的请求。

握手实例如下:

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

服务器端响应:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat

 四、如何使用WebSocket

可通过创建一个新的WebSocket实例并监听相关事件来实现。如下即为创建一个WebSocket实例:

const ws = new WebSocket('ws://localhost:8080');
ws.onopen = () => console.log('Connected to server');
ws.onmessage = (event) => console.log('Message from server ', event.data);
ws.onerror = (error) => console.error('WebSocket Error ', error);
ws.onclose = () => console.log('Disconnected from server');


总结

WebSocket提供了一种高效可靠的双向通信解决方案,适用于各种需要实时交互的应用程序。深入了解WebSocket通信对于我之后使用微信小程序与Qt端进实时通信有重要作用。


http://www.ppmy.cn/news/1571319.html

相关文章

Unity3D Shader 简析:变体与缓存详解

引言 在 Unity3D 中,Shader 是渲染管线的核心部分,负责控制物体的外观和材质表现。Shader 的变体(Variants)和缓存机制是优化渲染性能的关键。本文将深入探讨 Unity3D 中 Shader 变体的概念、缓存机制以及如何通过代码实现和管理…

通过nginx配置解决跨源资源共享(CORS)漏洞

漏洞名称: 跨源资源共享不安全配置漏洞 风险等级: 中 详细描述: 跨源资源共享(CORS)是一种机制,允许不同源之间的Web资源相互交互。在CORS不安全配置漏洞中,Web应用的服务器被误配置为允许…

13.3 使用 Chat Prompt Template 设计专业翻译提示模板

使用 Chat Prompt Template 设计专业翻译提示模板 关键词:LangChain 翻译模板, 多语言支持, 术语一致性, 动态变量替换, 格式控制 1. 翻译模板核心要素设计 一个专业的翻译提示模板需要包含以下关键组件: 组件作用描述示例片段角色定义明确模型身份“你是一名专业翻译引擎”…

PHP音视频课程培训系统

📚 音视频课程培训系统——为您量身定制的智慧学习空间 🔧 这是一款匠心独运的课程培训系统,基于ThinkPHP与Uniapp先进框架精心构筑。它不仅集成了音视频课程点播、付费文档获取、活动报名等多元化功能,更致力于为您打造一站式、…

kafka查看topic消息是否堆积

消费kafka topic命令 集群&#xff1a; kafka-console-consumer.sh --zookeeper <ip:2181>,<ip:2181>,<ip:2181> --topic <topic_name>单例&#xff1a; kafka-console-consumer.sh --zookeeper <ip:2181> --topic <topic_name>查看kafka…

鼠标滚轮冒泡事件@wheel.stop

我有一个页面,是在画布上的组件,但是组件中有一个table,table中数据多了,就会出现滚动条,正常情况下,滚动条用鼠标滚轮就可以滑动,但是这个table是在画布上,滚动滚轮会让画布缩放 在table外层的div上加上 wheel.stop,就生效了 wheel.stop 用途&#xff1a;这个修饰符用于处理鼠…

51单片机(国信长天)矩阵键盘的基本操作

在CT107D单片机综合训练平台上&#xff0c;首先将J5处的跳帽接到1~2引脚&#xff0c;使按键S4~S19按键组成4X4的矩阵键盘。在扫描按键的过程中&#xff0c;发现有按键触发信号后(不做去抖动)&#xff0c;待按键松开后&#xff0c;在数码管的第一位显示相应的数字:从左至右&…

【STM32】ADC|多通道ADC采集

本次实现的是ADC实现数字信号与模拟信号的转化&#xff0c;数字信号时不连续的&#xff0c;模拟信号是连续的。 1.ADC转化的原理 模拟-数字转换技术使用的是逐次逼近法&#xff0c;使用二分比较的方法来确定电压值 当单片机对应的参考电压为3.3v时&#xff0c;0~ 3.3v(模拟信…