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

关于WebSocket必知必会的知识点

什么是WebSocket

WebSocket是一种网络传输协议,可以在单个TCP连接上进行全双工通信,位于OSI模型的应用层。 WebSocket使得客户端和服务器之间的数据交换变得更加简单,服务器可以主动向客户端发送消息。在WebSocket API中,浏览器和服务器只需要完成一个握手,就可以建立持久性的连接,并进行双向数据传输。

WebSocket之前的方式

在WebSocket之前,浏览器(客户端)和服务器之间进行实时通信有以下几种方式:

  1. 短轮询(short polling):
    1. 浏览器每隔一段时间(比如每秒)就向服务器发送HTTP网络请求,服务器再把最新的数据返回给浏览器
    2. 这种方式的缺点在于浏览器需要不断地向服务器发送网络请求,而每次HTTP请求头和响应头中携带的信息可能是一样的,真正有用的数据只有一小部分,这样会消耗很多带宽资源
  2. 长轮询(long polling):
    1. 同样是浏览器每隔一段时间就向服务器发送HTTP网络去获取最新数据,区别在于服务器在接收到网络请求之后不会立即将最新数据返回给客户端,而是在数据发生变化或者达到一定的响应时间限制之后才将请求结果返回给客户端,从而减少了客户端请求的次数
    2. 这种方式的缺点在于服务器在将客户端请求挂起的时候,同样存在资源消耗

这些方式都不是很好的方式,在这种情况下,HTML5定义了WebSocket协议,它能更好地节省服务器资源和带宽,并且能够更实时地进行通信

WebSocket的优点

  1. 较少的控制开销:在建立连接之后,服务器和客户端之间交换数据时,用于协议控制的数据包头部相对较小
  2. 更强的实时性:由于协议是全双工的,因此服务器可以随时主动地向客户端传递消息。相比于HTTP请求需要等待客户端发送请求之后服务器才能响应,延迟明显更少。相比于长轮询,WebSocket能够更频繁地传递数据
  3. 保持连接状态:由于WebSocket建立连接之后,除非一方主动断开,否则这个连接会一直保持,因此在之后的通信过程中,就可以省略部分状态信息。(相比于HTTP每次请求都是独立的)
  4. 更好的二进制支持:WebSocket定义了二进制帧,相对HTTP,可以更轻松地处理二进制内容
  5. 可以支持协议拓展:用户可以自定义子协议
  6. 更好的压缩效果:相对于HTTP压缩,Websocket在适当的扩展支持下,可以沿用之前内容的上下文,在传递类似的数据时,可以显著地提高压缩率

WebSocket连接的建立过程

WebSocket 是独立的、建立在TCP上的协议。它建立连接的过程(handshake)如下:

  1. 首先建立TCP连接
  2. 在建立TCP连接之后,浏览器会先通过HTTP请求来告知服务器进行协议升级,具体的做法是在带上一些特殊的请求头:

 其中Connection: Upgrade用于告知服务器进行协议升级,Upgrade: websocket用于告知想要升级的协议是Websocket,Set-Websocket-Key是一段随机生成的base64码,用于服务器返回响应

http://www.lryc.cn/news/428576.html

相关文章:

  • Go 1.19.4 Sort排序进阶-Day 12
  • python-求距离(赛氪OJ)
  • 《第二十一章 传感器与定位 - 传感器应用》
  • Windows系统命令
  • C语言函数递归
  • 【python数据分析11】——Pandas统计分析(分组聚合进行组内计算)
  • 高性能web服务器
  • 微服务案例搭建
  • SAP负库存
  • 集团数字化转型方案(三)
  • ESP32智能设备:蓝牙音箱、AI语音助手、环境监测与调节以及智能控制,基于BLE与MQTT技术(代码详解)
  • web渗透测试 学习导图
  • WordPress禁止后台自定义功能
  • (六)Flink 窗口计算
  • SQL 布尔盲注 (injection 第六关)
  • OpenAI 重回巅峰:ChatGPT-4O 最新模型超越谷歌 Gemini 1.5,多项测试夺冠!
  • 软件工程(2)面向对象方法:Booch方法与开发实例
  • 高阶面试-concurrentHashMap的整理
  • VSCode系列 - 如何用VSCode搭建C++高效开发环境(1)
  • 【人工智能】Python融合机器学习、深度学习和微服务的创新之路
  • Stability AI发布了单目视频转4D模型的新AI模型:Stable Video 4D
  • 网站如何被Google收录?
  • LearnOpenGL——法线贴图、视差贴图学习笔记
  • 界面优化 - 绘图
  • 死锁问题分析和解决——资源回收时
  • 【Java】效率工具模板的使用
  • c++指南 -指针和引用
  • [CISCN 2023 华北]ez_date
  • 前端不同项目使用不同的node版本(Volta管理切换)
  • Ropdump:针对二进制可执行文件的安全检测工具