关于WebSocket必知必会的知识点

news2024/12/23 10:20:17

什么是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.coloradmin.cn/o/2056374.html

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

相关文章

20240820让飞凌的OK3588-C的核心板在Linux R4下挂载1TB的NTFS格式的TF卡

fdisk -l df -h df -t df -T mount 20240820让飞凌的OK3588-C的核心板在Linux R4下挂载1TB的NTFS格式的TF卡 2024/8/20 18:03 【默认挂载到/run/media/mmcblk1,不用任何操作!】 插入1TB的TF卡之后的dmesg信息: [ 876.551728] fdee0000.hdmi…

pandans读写分析csv文件

1.什么是pandans Pandas 是一个强大的 Python 库,主要用于数据处理和数据分析。它为 Python 提供了高效的数据结构和数据分析工具,使得数据处理变得更加简单和直观。 2.什么事csv文件 CSV 文件(Comma-Separated Values,逗号分隔值…

点亮宇宙的温暖之光 —— COSMOSPANDA星际熊猫“寞”降临!

在这个科技日新月异的时代,我们往往在追求进步的同时,忽略了心中那份最真挚的情感与温暖。但今天,让我们共同迎接一位来自宇宙深处的温暖使者——COSMOSPANDA星际熊猫“寞”,它将用独特的方式,连接过去与未来&#xff…

3:2比例的程序员专业显示器,效率提升显著,摸鱼时间又多了

对于我们程序员来说,显示器的重要性不言而喻,作为我们与代码交流的直接工具,他影响着我们的工作效率、舒适度和整体编程体验。我在家用的是自己笔记本的屏幕,简单写写代码还行,涉及到多任务协同或者大代码量开发就有点…

Linux 下安装miniconda(少走弯路)

Miniconda 和 Conda 都是用于管理 Python(及其他语言)环境和包的工具。 conda对于我来说是太臃肿了,很多的包我不会使用,所以选择安装miniconda是一个较好的选择。 下面是linux安装miniconda的实际操作。 在以下的网站&#xf…

复现 LET-NET

摘要 稀疏光流法是计算机视觉中的一项基本任务。然而,它依赖于恒定的假设限制了其在高动态范围(HDR)场景中的适用性。在本研究中,我们提出了一种新的方法,旨在通过学习一个对光照变化具有鲁棒性的特征映射来超越图像的…

LabVIEW轨距实时动态检测系统

轨距实时动态检测系统解决铁路轨距不平顺现象,提高铁路运行安全性。系统利用高精度的激光位移传感器与数据同步采集技术,结合LabVIEW软件进行数据处理,有效提高了轨距检测的准确性与效率。 项目背景 随着铁路运输业的快速发展,轨…

速度+耐力,希迪智驾引领中国商用车自动驾驶发展

作者 | 魏启扬 来源 | 洞见新研社 资本市场对自动驾驶的投资热情依然不减。 不久前,科技巨头Alphabet重申了对自动驾驶未来的承诺,并表示将向其自动驾驶子公司Waymo投资50亿美元,分多年进行。 更早一点的5月份,孙正义旗下的…

如何使用 JavaScript 动态创建下拉框?

在现代 Web 开发中,动态生成页面元素是一个常见的需求,比如在用户选择某个选项后,根据选择的内容动态生成新的下拉框。今天,我们来聊一聊如何使用 JavaScript 动态创建一个带选项的下拉框,并用一个具体的场景带大家进入…

第十九讲 python中的异常本质-异常定位-异常解决思路

目录 1.异常是什么? 2.异常机制的本质 2.1 本质 2.2 异常对象 2.3 抛出异常 2.4 捕捉异常 2.5 最终处理 3.异常的解决思路 3.1 异常定位 3.2 异常解决 1.异常是什么? 异常是指程序在运行时发生的错误或不正常情况。 工作中,程序遇到的情况不…

数据结构中的双向链表

1.链表的分类 链表的结构非常多样,以下情况组合起来就是8种(2x2x2)链表结构: 在带头链表中,除了头结点,其他结点均存储有效的数据。 头结点是占位子的,也叫做“哨兵位”。head结点就是头结点。…

【实战场景】如何优雅实现分页

【实战场景】如何优雅实现分页 开篇词:干货篇:1.添加PageHelper依赖2.添加PageHelper配置3.使用 PageHelper4.自定义Pageable注解 总结:1.执行查询2.处理分页结果3.注意事项 我是杰叔叔,一名沪漂的码农,下期再会&#…

代码随想录算法训练营day49 | 42. 接雨水、84.柱状图中最大的矩形

碎碎念: 参考:代码随想录 42. 接雨水 题目链接 42. 接雨水 思想 如图可以按照列来计算,这样宽度一定是1,只需要计算每一列的雨水的高度接口。而每一列的雨水高度取决于该列左侧最高的主子和右侧最高柱子中最矮的那个柱子的高度…

如何使用Java SpringBoot+Vue搭建半成品配菜平台,实现家庭烹饪新体验

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

用Python编写一个超级玛丽游戏|附源码

​ 编写一个超级玛丽游戏是一个复杂的任务,涉及到多个方面的编程知识和技巧。下面,我将详细讲解如何用Python编写一个简化版的超级玛丽游戏,包括所需的库、游戏逻辑、角色控制、关卡设计、碰撞检测等方面。 所需库 为了编写这个游戏&#…

猫咪去浮毛能一劳永逸吗?手动不行宠物空气净化器是真能做到

现在啊,越来越多的家庭选择养宠物来增添生活乐趣。但宠物带来的快乐背后,也有那么点“小困扰”:下班回家,迎接你的可能是满屋子的“特殊香味”和无处不在的毛发。这样的环境,真的不会对我们的健康产生不良影响吗&#…

照片整理专家,照片整理大师,照片图库整理,智能图片整理软件

前言 业务痛点: 就是我从2015年拥有自己的智能手机之后,就会刻意的对自己拍过的照片、视频,收藏的视频等,媒体元素,进行收集归纳,尝试过很多的存储方案,归纳整理方案 2015年 百度网盘 2016年 时…

电子厂车间的客流统计需要集成哪些硬件设备

在电子厂车间中,准确的客流统计对于生产管理和安全保障至关重要。要实现有效的客流统计,需要集成一系列硬件设备。 首先,客流统计系统主要由以下硬件组成。一是人数采集设备,通常采用红外传感器、双目摄像头等,安装在车…

【时时三省】(C语言基础)数据的额存储

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 例题1: i>0恒成立 会进入死循环 因为unsigned是无符号数 所以不可能会有负数 就会进入死循环 注意:i打印的时候如果它上面类型是无符号数 但是打印是%d 它会打印有符号数 例题:2 这个循…

【Python开发实践】AI人机对战五子棋——程序调用及运行效果

主函数调用: if __name__ __main__:game Game(version)while True:game.play()pygame.display.update()for event in pygame.event.get():if event.type pygame.QUIT:pygame.quit()exit()elif event.type pygame.MOUSEBUTTONDOWN:mouse_x, mouse_y pygame.mou…