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

news2024/11/28 14:41:03

在这里插入图片描述

一、是什么

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

客户端和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输
在这里插入图片描述从上图可见,websocket服务器与客户端通过握手连接,连接成功后,两者都能主动的向对方发送或接受数据

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

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

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

二、特点

全双工

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

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

二进制帧

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

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

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

协议名

引入ws和wss分别代表明文和密文的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://www.coloradmin.cn/o/1577747.html

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

相关文章

2024通信技术与航空航天工程国际会议(ICCTAE2024)

2024通信技术与航空航天工程国际会议(ICCTAE2024) 会议简介 通信技术和航空航天领域有着密切的关联和深远的意义。 随着通信技术和航空航天工程的快速发展,这两个领域的交叉融合为学术界和工业界提供了广阔的研究空间和实际应用前景。为了进一步推动相关领域的发…

手把手教你免费领取雨云游戏云服务器

随着云计算技术的快速发展,云服务器已经成为许多开发者和创业者的首选。雨云游戏云服务器作为一款专为游戏开发者打造的高性能、低成本的云服务,吸引了越来越多的用户,本文将手把手教你如何免费领取雨云游戏云服务器。 1、访问雨云官网并注册…

SpringBoot快速入门笔记(5)

文章目录 一、elemetnUI1、main.js2、App.vue3、fontAwesome 一、elemetnUI 开源前端框架,安装 npm i element-ui -S 建议查看官方文档 Element组件,这里是Vue2搭配elementUI,如果是vue3就搭配elementPlus,这里初学就以Vue2为例子…

【JavaWeb】Day32.SpringBootWeb请求响应——分层解耦(二)

3.IOC&DI 3.1 IOC&DI入门 完成Controller层、Service层、Dao层的代码解耦 思路: 1. 删除Controller层、Service层中new对象的代码 2. Service层及Dao层的实现类,交给IOC容器管理 3. 为Controller及Service注入运行时依赖的对象 Controller程序…

健身房如何通过软文获客?媒介盒子告诉你

如今全民健康意识上升,大家越来越重视运动带给人的获得感以及成就感,对于健身房来说,适当进行推广,不仅可以提高品牌知名度,还能吸引更多的潜在客户。今天媒介盒子就从专业角度和大家聊聊:健身房如何通过软…

手机软件何时统一--桥接模式

1.1 凭什么你的游戏我不能玩 2007年苹果手机尚未出世,机操作系统多种多样(黑莓、塞班、Tizen等),互相封闭。而如今,存世的手机操作系统只剩下苹果OS和安卓,鸿蒙正在稳步进场。 1.2 紧耦合的程序演化 手机…

Social Skill Training with Large Language Models

Social Skill Training with Large Language Models 关键字:社交技能训练、大型语言模型、人工智能伙伴、人工智能导师、跨学科创新 摘要 本文探讨了如何利用大型语言模型(LLMs)进行社交技能训练。社交技能如冲突解决对于有效沟通和在工作和…

九泰智库 | 医械周刊- Vol.20

⚖️ 法规动态 国家药监局发布进一步加强医疗器械注册人委托生产监督管理的公告 4月3日,为全面落实医疗器械注册人质量安全主体责任,进一步加强注册人委托生产监督管理,有效防控医疗器械质量安全风险。国家药监局发布关于进一步加强医疗器械…

03-JAVA设计模式-适配器模式

适配器模式 设么是适配器模式 它属于结构型模式,主要用于将一个类的接口转换成客户端所期望的另一种接口,从而使得原本由于接口不兼容而无法协同工作的类能够一起工作。 适配器模式主要解决的是不兼容接口的问题。在软件开发中,经常会有这…

【JavaEE框架】spring之配置数据源和JdbcTemplate

目录 一、数据准备 1、在pom.xml种导入依赖包 2、 建立数据库表 二、测试数据源&#xff08;操作数据库&#xff09; 三、在spring中使用数据源 四、增删改查操作数据库 五、测试 六、部分代码具体分析 一、数据准备 1、在pom.xml种导入依赖包 <dependency><g…

Java设计模式:外观模式之优雅门面(九)

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 在软件工程中&#xff0c;设计模式是解决常见设计问题的经验总结&#xff0c;它为开发者提供了一种通用的、可复用的解决方案。外…

同样是测痛仪有什么不一样?大小鼠足底光热刺痛仪VS大小鼠鼠尾测痛仪

简单介绍&#xff1a; ZL-024E大小鼠足底光热刺痛仪是应用在痛觉生理学、药理学等痛觉研究的仪器。可自动测定大/小鼠在自由状态下足底光热刺激痛阈时间&#xff0c;操作简便&#xff0c;并且可自动得出测定结果&#xff0c;是用于药理实验中研究镇痛**的理想实验仪器。 详情…

编程网站推荐

这里是我的一些喜欢用的编程可以用到的网站 json在线格式化校验工具 随机密码生成

关于近期上架过包的一些总结分享

近期过包包体很多&#xff0c;所以遇到的一些问题也是很多很杂&#xff0c;但是基本上都解决了。少部分因为政策原因导致的包体问题封号&#xff0c;这类就只能先排查问题&#xff0c;再重新制作了。对于拒审问题的解决&#xff0c;希望各位开发者能留下相关流程截图&#xff0…

使用nodejs搭建脚手架工具并发布到npm中

使用nodejs搭建脚手架工具并发布到npm中 一、安装环境依赖及脚手架搭建过程二、搭建Monorepo 风格的脚手架工程三、脚手架的必备模块命令参数模块获取命令参数设置子命令用户交互模块文件拷贝模块脚手架中的路径处理目录守卫文件拷贝模块动态文件生成模块mustache简介自动安装依…

Java 开发篇+一个简单的数据库管理系统ZDB

说明&#xff1a;本文供数据库爱好者和初级开发人员学习使用 标签&#xff1a;数据库管理系统、RDBMS、Java小程序、Java、Java程序 系统&#xff1a;Windows 11 x86 CPU &#xff1a;Intel IDE &#xff1a;IntelliJ IDEA Community Edition 2024 语言&#xff1a;Java语言 标…

在线JSON工具

功能支持 ctrls json格式化游览器本地保存ctrla ctrlc 自动检测选中范围是否是全选&#xff0c;然后按照格式化方式添加到粘贴板中json 粘贴JSON自动格式化json可视化修改json压缩复制json层级折叠json关键key 搜索(自动提示高亮)满足某些近视的可以自行调整字体大小, 并且会游…

React复习全攻略:重温旧知,收获新知

简介 大背景&#xff1a; 起源于 Facebook 的内部项目&#xff0c;因为对市面上所有JS MVC框架不满意&#xff0c;就自己开发了一套&#xff0c;用来开发Instagram项目。&#xff08;开源时间&#xff1a;2013年5月&#xff09; 三句话解释&#xff1a; 是用于构建 Web 和原…

MWeb Pro For Mac v4.5.9 强大的 Markdown 软件中文版

MWeb 是专业的 Markdown 写作、记笔记、静态博客生成软件&#xff0c;目前已支持 Mac&#xff0c;iPad 和 iPhone。MWeb 有以下特色&#xff1a; 软件下载&#xff1a;MWeb Pro For Mac v4.5.9 软件本身&#xff1a; 使用原生的 macOS 技术打造&#xff0c;追求与系统的完美结合…

OpenImageDebugger - CLion研究

在windows下有vistual studio&#xff0c;针对opencv有image watch&#xff0c;在ubuntu下用Clion插件Image Watch要收费&#xff0c;遂研究OpenImageDebugger与CLion问题&#xff0c;还有些未研究透彻&#xff0c;先记录当前部分。 Open Image Debugger Open Image Debugger …