websocket原理及简单入门

在了解websocket之前,我们先来了解一下websocket出现之前的世界
当我们在开腾讯会议或视频通话时,我们自己的影像会传给对方,对方的影像也能同时传给我们,这就是即时通讯技术
即时通讯技术是实现:服务器端可以时地将数据的更新或变化反应到客户端,在Web中,由于浏览器的限制,实现即时通讯需要借助一些方法。这种限制出现的主要原因是,Web通信都是浏览器先发送请求到服务器,服务器再进行响应完成数据的现实更新。
除了websocket之外,实现即时通讯主要有三种方式,短轮询、长轮询(comet)、长连接(SSE),都是在HTTP基础上实现的

轮询是什么

轮询(Polling)就是客户端定期向服务器发请求. 可以用于定期查询或获取新数据或状态的更新。在轮询中,程序会以固定的时间间隔重复执行请求,以检查是否有新的数据可用或某个条件是否满足。

短轮询是什么

客户端以固定的时间间隔向服务器发起请求,查询是否有新的数据或状态更新。
过程:客户端发起请求 -> 服务器处理请求并返回响应 -> 客户端接收响应并处理 -> 客户端等待一段时间后重复上述过程。
特点:
客户端定期主动发起请求,无论服务器上是否有更新的数据。
服务器在每次请求中只返回当前的数据或状态,不保持连接。
相对简单实现,适用于实时性要求不高的场景。
但是明显会产生太多请求,开销和延迟过大

长轮询(long poll)是什么

客户端发起请求后,服务器会保持连接并等待数据或状态更新,直到有更新时才返回响应给客户端
过程:客户端发起请求 -> 服务器处理请求,如果没有更新,则服务器保持连接,等待更新 -> 当有新的数据或状态更新时,服务器返回响应给客户端 -> 客户端接收响应并处理 -> 客户端重新发起请求。
特点:
服务器在没有数据更新时保持连接,避免了频繁的请求和响应。
当有新的数据或状态更新时,服务器会立即返回响应给客户端。
相对于短轮询,长轮询提供了更快的实时性和更低的网络流量。
需要在服务器端实现保持连接的机制,可能会增加服务器的负载。
虽然请求少了,但是还要频繁建立和关闭链接

Comet是什么

保持长链接,在返回请求后继续保持连接打开,并允许服务器使用持久连接将数据以流的形式主动发送给客户端。

websocket为什么是神

WebSocket是Html5定义的一个新协议,与传统的http协议不同,该协议可以实现服务器与客户端之间全双工通信。简单来说,首先需要在客户端和服务器端建立起一个连接,这部分需要http。连接一旦建立,客户端和服务器端就处于平等的地位,可以相互发送数据,不存在请求和响应的区别。

websocket可以

  1. 双向实时通信
    允许在单个,长时间的连接上进行双向实时通信. 在需要快速实时更新的应用程序里,比http更高效,而且建立连接后客户端与服务器端是完全平等的,可以互相主动请求
  2. 降低延迟
    链接一旦建立便会保持开放,数据可以在客户端和服务器端之间以比http更低的延迟进行传输
  3. 更高效的资源利用
    可以减少重复请求和响应的开销,因为他的连接只需要建立一次
  4. 不用发送http header就能交换数据
    HTTP长连接中,每次数据交换除了真正的数据部分外,服务器和客户端还要大量交换HTTP header,信息交换效率很低。Websocket协议通过第一个request建立了TCP连接之后,之后交换的数据都不需要发送 HTTP header就能交换数据

实操环节

虽然说是实操环节,但是我在这就简单说明一下实操的步骤,感兴趣可以看【10 分钟 理论 + 实操 搞懂 WebSocket】 https://www.bilibili.com/video/BV1ac411c7vr/?share_source=copy_web&vd_source=64698271e543eb5149301ff926e69c40

js中websocket的库:Socket.io

  1. 建立连接过程:HTTP发送一次常规get请求, 在请求头中带上Upgrade告诉服务器要从HTTP升级成websocket,
  2. 经过3次握手后,建立起TCP连接;http请求里存放WebSocket支持的版本号等信息,如:Upgrade、Connection、WebSocket-Version等;连接建立成功,客户端和服务端可以随时进行数据交互。
  3. 服务器收到客户端的握手请求后,同样采用HTTP协议回馈数据;
  4. 客户端收到连接成功的消息后,开始借助于TCP传输信道进行全双工通信。
  5. 前端中的代码:
    创建websocket实例, 指定websocket服务器地址, 也可以调用一些函数,如socket.onopen等,不再赘述
  6. 后端中的代码

webSocket心跳机制:

为什么使用心跳机制:为了保持WebSoket稳定的长连接,在建立连接之后,服务端和客户端之间通过心跳包来保持连接状态,以防止连接因为长时间没有数据传输而被切断

什么是心跳包:心跳包是一种特殊的数据包,它不包含任何实际数据,只是用来维持连接状态的

怎么使用:通常情况下心跳包由客户端和服务端定期发送一个空的数据帧,以确保双方的链接仍然有效,避免链接因为长时间没有数据传输而被中断,如果长时间没有收到对方的心跳包就可以认为连接已经断开需要重新建立连接。

webSoket限制:不提供加密功能,不安全,可以用SSL协议对来webSoket进行加密,确保数据安全,也可以在服务端限制权限设置白名单或者黑名单只允许特定地址或者域名的客户端进行链接。

webSocket的限制

不提供加密功能
浏览器的限制:不支持IE10以前的版本
对服务器要求高

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/817045.shtml

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

相关文章

Python中操作Excel表对象并打包为脚本

一、准备工作 pip install pandas pip install openpyxl pip install pyinstaller 数据表格: 数据表下载 二、执行写入操作 import pandas as pd # pyinstaller --onefile attendance_records_score.py # 打包 # 读取源Excel文件(假设源表有列A…

【攻防世界】php_rce (ThinkPHP5)

进入题目环境,查看页面信息: 页面提示 ThinkPHP V5,猜测存在ThinkPHP5 版本框架的漏洞,于是查找 ThinkPHP5 的攻击POC。 构造 payload: http://61.147.171.105:50126/?sindex/think\app/invokefunction&functioncall_user_f…

【Go语言快速上手(一)】 初识Go语言

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:Go语言专栏⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习更多Go语言知识   🔝🔝 Go快速上手 1. 前言2. Go语言简介(为…

模拟Android系统Zygote启动流程

版权声明:本文为梦想全栈程序猿原创文章,转载请附上原文出处链接和本声明 前言: 转眼时间过去了10年了,回顾整个10年的工作历程,做了3年的手机,4年左右的Android指纹相关的工作,3年左右的跟传感…

什么是三次握手和四次握手

三次握手和四次挥手是TCP协议中用于建立和终止TCP连接的重要机制。 三次握手是TCP连接建立的过程,具体步骤如下: 客户端发送一个带有SYN标志的数据包给服务端,表示希望建立连接。服务端收到后,回传一个带有SYN/ACK标志的数据包&…

亚马逊CloudFront使用体验

前言 首先在体验CloudFront之前,先介绍一下什么是CDN,以及CDN的基本原理。 CDN是Content Delivery Network(内容分发网络)的缩写,是一种利用分布式节点技术,在全球部署服务器,即时地将网站、应…

《由浅入深学习SAP财务》:第2章 总账模块 - 2.6 定期处理 - 2.6.6 年初操作:科目余额结转

2.6.6 年初操作:科目余额结转 在使用事务代码 FAGLB03 查询科目余额时,可以看到按期间的发生额清单。其中,第一行称为“余额结转”,该行的累计余额代表上年度遗留下来的余额,也就是年初余额。对于资产负债表科目而言&a…

【QT教程】QT6图形视图编程

QT6图形视图编程 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C扩展开发视频课程 免费QT视频课程 您可以看免费1000个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频免费看 免费…

七大设计原则

在软件开发的领域中,随着技术的不断进步和市场需求的不断变化,软件系统的设计和维护变得越来越重要。为了确保软件系统能够长期有效地运行,并且能够在未来的发展中适应新的需求和技术变化,提高软件系统的可维护性和可复用性成为了…

map与set

set使用 set在我们就是我们前面学习的k模型,它可以用来比对数据,增删查的时间复杂度都是O(logn)效率非常高,由于它底层的原因,它也可以实现排序,通过中序遍历可以输出我们的有序的数据&#xff…

安装gensim报错

安装gensim pip install --upgrade gensim装完以后注意一个 装了一堆库其实,看下对应的scipy版本是1.13.0 然后运行 import gensim报错: cannot import name ‘triu’ from ‘scipy.linalg’ https://www.soinside.com/question/brZ46N5EH7bk9xdVwXa…

华为OD机试 - 内存冷热标记(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷C卷)》。 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试…

Springboot+Vue项目-基于Java+MySQL的高校心理教育辅导系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

【Linux网络编程】TCP协议

TCP协议 1.TCP协议段格式4位首位长度序号和确认序号16位窗口大小6个标志位 2.确认应答机制3.超时重传机制4.连接管理机制如何理解连接如何理解三次握手如何理解四次挥手 5.流量控制6.滑动窗口7.拥塞控制8.延迟应答9.捎带应答10.面向字节流11.粘包问题12.TCP异常情况13.TCP小结1…

亚马逊全球跨境市场地位稳固,武汉星起航深化服务助力合作伙伴

在全球跨境电商市场的激烈竞争中,亚马逊凭借其强大的市场地位和卓越的平台特点,持续引领着行业的发展潮流。作为行业的领军者,亚马逊不仅占据了全球市场的一大部分,还以其深厚的品牌影响力、广泛的覆盖范围和高效的物流运作&#…

雅虎、乐天、煤炉、国际站、newegg、wish等跨境卖家如何提升店铺销量?深度解析自养号测评的价值

一、如何提升销量? 优化产品描述和图片:确保您的产品描述准确、详细,图片清晰、美观。这将有助于提高产品的吸引力,增加潜在买家的购买意愿。 提供良好的客户服务:及时回复买家的咨询和问题,解决他们的疑…

【MySQL】索引篇

SueWakeup 个人主页:SueWakeup 系列专栏:学习技术栈 个性签名:保留赤子之心也许是种幸运吧 本文封面由 凯楠📸友情提供 目录 本系列传送门 1. 什么是索引 2. 索引的特性 3. 索引的分类 4. 索引的优点及缺点 优点 缺点 5.…

我的电脑图标没了怎么办?恢复图标只需一分钟!

“我打开电脑后,突然发现我的电脑图标没了,这是为什么呢?有什么方法可以找回我的电脑图标吗?” 在日常使用电脑的过程中,电脑桌面的各个图标是保证我们能正常打开应用的前提。我的电脑图标没了怎么办?这可能…

zabbix升级后图形文字不显示

原版本升级后版本6.4.76.4.13 问题现象 更新小版本后zabbix数据图形都有,只有下方文字不显示 处理方式 下载win字体,根据自己选择,上传至/usr/share/zabbix/assets/fonts目录下,修改文件名为jianti.ttf 修改默认字体配置文件…

CSS导读 (元素显示模式 上)

(大家好,今天我们将继续来学习CSS的相关知识,大家可以在评论区进行互动答疑哦~加油!💕) 目录 三、CSS的元素显示模式 3.1 什么是元素显示模式 3.2 块元素 3.3 行内元素 3.4 行内块元素 3.5 元素…