首页 > 其他分享 >说说对WebSocket的理解?应用场景?

说说对WebSocket的理解?应用场景?

时间:2024-04-08 18:44:58浏览次数:21  
标签:场景 HTTP 理解 Sec Upgrade WebSocket websocket 客户端

一、是什么

WebSocket,是一种网络传输协议,位于OSI模型的应用层。可在单个TCP连接上进行全双工通信,能更好的节省服务器资源和带宽并达到实时通迅

客户端和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输

从上图可见,websocket服务器与客户端通过握手连接,连接成功后,两者都能主动的向对方发送或接受数据

而在websocket出现之前,开发实时web应用的方式为轮询

不停地向服务器发送 HTTP 请求,问有没有数据,有数据的话服务器就用响应报文回应。如果轮询的频率比较高,那么就可以近似地实现“实时通信”的效果

轮询的缺点也很明显,反复发送无效查询请求耗费了大量的带宽和 CPU资源

二、特点

全双工

通信允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的结合

例如指 A→B 的同时 B→A ,是瞬时同步的

二进制帧

采用了二进制帧结构,语法、语义与 HTTP 完全不兼容,相比http/2WebSocket更侧重于“实时通信”,而HTTP/2 更侧重于提高传输效率,所以两者的帧结构也有很大的区别

不像 HTTP/2 那样定义流,也就不存在多路复用、优先级等特性

自身就是全双工,也不需要服务器推送

协议名

引入wswss分别代表明文和密文的websocket协议,且默认端口使用80或443,几乎与http一致

ws://www.chrono.com
ws://www.chrono.com:8080/srv
wss://www.chrono.com:445/im?user_id=xxx

握手

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
  • Connection:必须设置Upgrade,表示客户端希望连接升级
  • Upgrade:必须设置Websocket,表示希望升级到Websocket协议
  • Sec-WebSocket-Key:客户端发送的一个 base64 编码的密文,用于简单的认证秘钥。要求服务端必须返回一个对应加密的“Sec-WebSocket-Accept应答,否则客户端会抛出错误,并关闭连接
  • Sec-WebSocket-Version :表示支持的Websocket版本

服务端返回的数据格式:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=Sec-WebSocket-Protocol: chat
  • HTTP/1.1 101 Switching Protocols:表示服务端接受 WebSocket 协议的客户端连接
  • Sec-WebSocket-Accep:验证客户端请求报文,同样也是为了防止误连接。具体做法是把请求头里“Sec-WebSocket-Key”的值,加上一个专用的 UUID,再计算摘要

优点

  • 较少的控制开销:数据包头部协议较小,不同于http每次请求需要携带完整的头部
  • 更强的实时性:相对于HTTP请求需要等待客户端发起请求服务端才能响应,延迟明显更少
  • 保持创连接状态:创建通信后,可省略状态信息,不同于HTTP每次请求需要携带身份验证
  • 更好的二进制支持:定义了二进制帧,更好处理二进制内容
  • 支持扩展:用户可以扩展websocket协议、实现部分自定义的子协议
  • 更好的压缩效果:Websocket在适当的扩展支持下,可以沿用之前内容的上下文,在传递类似的数据时,可以显著地提高压缩率

二、应用场景

基于websocket的事实通信的特点,其存在的应用场景大概有:

  • 弹幕
  • 媒体聊天
  • 协同编辑
  • 基于位置的应用
  • 体育实况更新
  • 股票基金报价实时更新

参考文献

  • https://zh.wikipedia.org/wiki/WebSocket
  • https://www.oschina.net/translate/9-killer-uses-for-websockets
  • https://vue3js.cn/interview

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 

 

标签:场景,HTTP,理解,Sec,Upgrade,WebSocket,websocket,客户端
From: https://www.cnblogs.com/smileZAZ/p/18122294

相关文章

  • 关于雨滴谱数浓度的理解
    采样面积为:54cm2或0.0054m2时间间隔:60s这个公式如何理解?答:此公式是雨滴谱的数浓度公式,算出此公式才能进行后面的gamma分布首先,这个公式计算的是某1分钟32×32数据的N(Di)情况,比如从i=3开始计算,那么就是D3对应的所有速度档求和的情况。ΔDi如何理解?......
  • 苍穹外卖10(Spring Task定时任务,WebSocket双向通信,订单状态定时处理,来电提醒,客户催单)
    目录一、SpringTask1.介绍2.入门1使用步骤2使用示例3.详解1@Scheduled注解2cron表达式1cron表达式6个域2各个域的取值说明4.小结二、订单状态定时处理1.需求分析1问题分析2功能需求2.代码开发1修改引导类加@EnableScheduling2创建OrderTask......
  • Vue.nextTick() 使用场景及实现原理
    Vue.nextTick()基本使用作用:等待下一次DOM更新刷新的工具方法。为什么需要用到Vue.nextTick()?当你在Vue中更改响应式状态时,最终的DOM更新并不是同步生效的,而是由Vue将它们缓存在一个队列中,直到下一个“tick”才一起执行。这样是为了确保每个组件无论发生多少......
  • unordered_map的理解和应用
    1、介绍unordered_map,它是一个关联容器,内部采用的是hash表结构,拥有快速检索的功能。1.1、特性关联性:通过key去检索value,而不是通过绝对地址(和顺序容器不同)无序性:使用hash表存储,内部无序Map:每个值对应一个键值键唯一性:不存在两个元素的键一样动态内存管理:使用内存管理......
  • (译) 理解 Elixir 中的宏 Macro, 第六部分:原地代码生成
    ElixirMacros系列文章译文[1](译)UnderstandingElixirMacros,Part1Basics[2](译)UnderstandingElixirMacros,Part2-MacroTheory[3](译)UnderstandingElixirMacros,Part3-GettingintotheAST[4](译)UnderstandingElixirMacros,Part4-Div......
  • cesium 地图旋转 整个场景旋转 开场动画
    设置camera旋转能实现整个场景的旋转,多用于开场动画开始旋转functiononTickCallback(){viewer.scene.camera.rotate(Cesium.Cartesian3.UNIT_Z,-0.02);}viewer.clock.onTick.addEventListener(onTickCallback);停止旋转view......
  • WebSocket socket.io.js 前后端交互,优秀的示例
    前言全局说明WebSocketsocket.io.js前后端交互,优秀的示例一、官方示例https://flask-socketio.readthedocs.io/en/latest/getting_started.html二、其他示例https://www.cnblogs.com/yoyoketang/p/18022139三、Python的subprocess执行命令、交互、等待、是否结束、......
  • (译) 理解 Elixir 中的宏 Macro, 第五部分:组装 AST
    ElixirMacros系列文章译文[1](译)UnderstandingElixirMacros,Part1Basics[2](译)UnderstandingElixirMacros,Part2-MacroTheory[3](译)UnderstandingElixirMacros,Part3-GettingintotheAST[4](译)UnderstandingElixirMacros,Part4-Div......
  • jmeter秒杀活动接口场景设计
    bzm-ConcurrencyThreadGroup 要做一个秒杀,能支持1000个人同时秒杀,我们的系统不能奔溃 用户对秒杀的理解,我要在1秒钟内收到处理结果,1000tps    可不可以理解为:1000个人访问我们系统,持续运行,系统不能崩溃就可通过需求:性能系统较差,设置目......
  • jmeter面向目标性能场景
    bzm-ArrivalsThreadGroup需求:期望我项目的接口,都要能满足50tps? 计算:50tps:50个事务每秒50ts:1分钟:50*60s=3000事务、1小时3000*60=180000事务。1小时要处理18w个请求、10小时180w、24小时432w个请求,如果公司的产品,日均访问量约为千万,50tps基本已经能满足......