代码编织梦想

一,什么是websocket
WebSocket是HTML5下一种新的协议(websocket协议本质上是一个基于tcp的协议)
它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的
Websocket是一个持久化的协议
二,websocket的原理
websocket约定了一个通信的规范,通过一个握手的机制,客户端和服务器之间能建立一个类似tcp的连接,从而方便它们之间的通信
在websocket出现之前,web交互一般是基于http协议的短连接或者长连接
websocket是一种全新的协议,不属于http无状态协议,协议名为"ws"
三,websocket与http的关系


 相同点:

都是基于tcp的,都是可靠性传输协议
都是应用层协议
不同点:

WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息
HTTP是单向的
WebSocket是需要浏览器和服务器握手进行建立连接的
而http是浏览器发起向服务器的连接,服务器预先并不知道这个连接
 联系:

WebSocket在建立握手时,数据是通过HTTP传输的。但是建立之后,在真正传输时候是不需要HTTP协议的
总结(总体过程):

首先,客户端发起http请求,经过3次握手后,建立起TCP连接;http请求里存放WebSocket支持的版本号等信息,如:Upgrade、Connection、WebSocket-Version等;
然后,服务器收到客户端的握手请求后,同样采用HTTP协议回馈数据;
最后,客户端收到连接成功的消息后,开始借助于TCP传输信道进行全双工通信。
四,websocket解决的问题
1.http存在的问题
http是一种无状态协议,每当一次会话完成后,服务端都不知道下一次的客户端是谁,需要每次知道对方是谁,才进行相应的响应,因此本身对于实时通讯就是一种极大的障碍
http协议采用一次请求,一次响应,每次请求和响应就携带有大量的header头,对于实时通讯来说,解析请求头也是需要一定的时间,因此,效率也更低下
最重要的是,需要客户端主动发,服务端被动发,也就是一次请求,一次响应,不能实现主动发送
2.long poll(长轮询)
对于以上情况就出现了http解决的第一个方法——长轮询
基于http的特性,简单点说,就是客户端发起长轮询,如果服务端的数据没有发生变更,会 hold 住请求,直到服务端的数据发生变化,或者等待一定时间超时才会返回。返回后,客户端又会立即再次发起下一次长轮询
优点是解决了http不能实时更新的弊端,因为这个时间很短,发起请求即处理请求返回响应,实现了“伪·长连接”
张三取快递的例子,张三今天一定要取到快递,他就一直站在快递点,等待快递一到,立马取走
 从例子上来看有个问题:

假如有好多人一起在快递站等快递,那么这个地方是否足够大,(抽象解释:需要有很高的并发,同时有很多请求等待在这里)
总的来看:
推送延迟。服务端数据发生变更后,长轮询结束,立刻返回响应给客户端。

服务端压力。长轮询的间隔期一般很长,例如 30s、60s,并且服务端 hold 住连接不会消耗太多服务端资源。

3.Ajax轮询
基于http的特性,简单点说,就是规定每隔一段时间就由客户端发起一次请求,查询有没有新消息,如果有,就返回,如果没有等待相同的时间间隔再次询问
优点是解决了http不能实时更新的弊端,因为这个时间很短,发起请求即处理请求返回响应,把这个过程放大n倍,本质上还是request = response
举个形象的例子(假设张三今天有个快递快到了,但是张三忍耐不住,就每隔十分钟给快递员或者快递站打电话,询问快递到了没,每次快递员就说还没到,等到下午张三的快递到了,but,快递员不知道哪个电话是张三的,(可不是只有张三打电话,还有李四,王五),所以只能等张三打电话,才能通知他,你的快递到了)
 从例子上来看有两个问题:

假如说,张三打电话的时间间隔为10分钟,当他收到快递前最后一次打电话,快递员说没到,他刚挂掉电话,快递入库了(就是到了),那么等下一次时间到了,张三打电话知道快递到了,那么这样的通讯算不算实时通讯?很显然,不算,中间有十分钟的时间差,还不算给快递员打电话的等待时间(抽象的解释:每次request的请求时间间隔等同于十分钟,请求解析相当于等待)
假如说张三所在的小区每天要收很多快递,每个人都采取主动给快递员打电话的方式,那么快递员需要以多快的速度接到,其他人打电话占线也是问题(抽象解释:请求过多,服务端响应也会变慢)
总的来看,Ajax轮询存在的问题:
推送延迟。

服务端压力。配置一般不会发生变化,频繁的轮询会给服务端造成很大的压力。

推送延迟和服务端压力无法中和。降低轮询的间隔,延迟降低,压力增加;增加轮询的间隔,压力降低,延迟增高

4.websocket的改进
一旦WebSocket连接建立后,后续数据都以帧序列的形式传输。在客户端断开WebSocket连接或Server端中断连接前,不需要客户端和服务端重新发起连接请求。在海量并发及客户端与服务器交互负载流量大的情况下,极大的节省了网络带宽资源的消耗,有明显的性能优势,且客户端发送和接受消息是在同一个持久连接上发起,实现了“真·长链接”,实时性优势明显。

WebSocket有以下特点:

是真正的全双工方式,建立连接后客户端与服务器端是完全平等的,可以互相主动请求。而HTTP长连接基于HTTP,是传统的客户端对服务器发起请求的模式。
HTTP长连接中,每次数据交换除了真正的数据部分外,服务器和客户端还要大量交换HTTP header,信息交换效率很低。Websocket协议通过第一个request建立了TCP连接之后,之后交换的数据都不需要发送 HTTP header就能交换数据,这显然和原有的HTTP协议有区别所以它需要对服务器和客户端都进行升级才能实现(主流浏览器都已支持HTML5)
————————————————
版权声明:本文为CSDN博主「ohana!」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_54773998/article/details/123863493

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_49033047/article/details/129471498

产品开发中项目与项目管理-爱代码爱编程

《人人都是产品经理》读书笔记3 之前提到产品立项之前会有需求的采集、分析和筛选,需求的采集主要从定性与定量,说与做四个维度进行,需求分析需要将用户需求转化为产品需求,确定需求基本属性、分析商业价值,编写BRD,评价实现

《大数据导论》一导读_weixin_33937778的博客-爱代码爱编程

作 者 简 介 Thomas Erl Thomas Erl是IT畅销书作者,Arcitura教育公司的创始人,Prentice Hall出版社“Thomas Erl的服务技术丛书”的编辑。他的书发行量超过200 000册,成为国际畅销书,并且已经获得多个重要IT组织成员的正式认可,例如,IBM、Microsoft、O

数据分析师所需的编程技能 : html篇_小匿的博客-爱代码爱编程

在从事数分工作的过程中,有些任务会遇到前端相关的知识,比如每日自动调度内含表格的日报、爬虫、Python的BI库(plotly.dash)等等。让我感受到一些基础的前端知识也是数分从业者所需的,所以,总结一些基础的html知识(非全部),以免遗忘,查漏补缺。   1、前端三大件html、css、js是什么? 1.1) HTML是网页内容的载体。内容就

atitit 项目沟通管理 艾提拉总结 目录 1. 项目中沟通对象 2 1.1. 主要为项目干系人 产品部门 运营部门组员等 2 1.2. 适当越级沟通, 与高层直接沟通 3 2. 沟通频率 3_attilax的博客-爱代码爱编程

Atitit 项目沟通管理  艾提拉总结   目录 1. 项目中沟通对象 2 1.1. 主要为项目干系人 产品部门 运营部门组员等 2 1.2. 适当越级沟通, 与高层直接沟通 3 2. 沟通频率 3 3. 书面沟通 vs 当面沟通 3 3.1. 会议 与回忆纪要 3 3.2. 日报 周报 日报周报月报制度 3 3.3. 例会。通过月会

互联网人求职向传统行业倾斜;全国有两成开发者月薪超1.7万 | 美通企业日报...-爱代码爱编程

今日看点 猎聘大数据:互联网人求职向传统行业倾斜。3月2日,猎聘发布《2020年2月互联网从业者求职报告》。报告显示,2020年2月,有投递行为的互联网行业从业者,开始出现向传统行业、大型企业倾斜的趋势,并对跳槽后的薪酬期望明显降低。猎聘大数据显示,2020年2月有投递行为的互联网行业从业者依然投递互联网行业的占比为15.13%,比2019

Arm服务器芯片编年史-爱代码爱编程

目录 1    前言 2    第一波浪潮(2008-2013) 2.1    启程2008 2.1.1   Calxeda 2011 2.2    Computex2012 2.3    MarvellArmada XP 2013 2.4    Calxeda倒闭 2013 3    第二波 Armv8.0 (2011-2018)

html打开网页过场动画_数据分析师所需的编程技能 : Html篇-爱代码爱编程

在从事数分工作的过程中,有些任务会遇到前端相关的知识,比如每日自动调度内含表格的日报、爬虫、Python的BI库(plotly.dash)等等。让我感受到一些基础的前端知识也是数分从业者所需的,所以,总结一些基础的html知识(非全部),以免遗忘,查漏补缺。 1、前端三大件html、css、js是什么? 1.1) HTML是网页内容的

python商务图表_Excel 数据之美:科学图表与商业图表的绘制(全彩)-爱代码爱编程

Excel 数据之美:科学图表与商业图表的绘制(全彩) 出版时间:2016 内容简介 本书主要介绍基于Excel 2016的科学图表和商业图表的绘制方法,首次引入R ggplot2、Python Seaborn、Tableau、D3.js、Matlab 2015、Origin等绘图软件的图表风格与配色方案,在无须编程的情况下,就能实现这些软件的图

Linux 内核加速支持 Rust 开发;中科院计划每半年升级一次 RISC-V 芯片;Python 3.10.1 发布 | 开源日报-爱代码爱编程

整理 | 宋彤彤 责编 | 屠敏 开源吞噬世界的趋势下,借助开源软件,基于开源协议,任何人都可以得到项目的源代码,加以学习、修改,甚至是重新分发。关注「开源日报」,一文速览国内外今日的开源大事件吧! 一分钟速览新闻点! 2022 年,Linux 内核或将正式支持 Rust 开发MongoDB CTO Mark Porter:AWS DocumentD

恶意软件通杀 Win、macOS、Linux 三大系统;唱片巨头起诉 Youtube-dl 的托管服务商;2022 年不是 Linux 桌面元年 | 开源日报-爱代码爱编程

整理 | 宋彤彤 责编 | 郑丽媛 开源吞噬世界的趋势下,借助开源软件,基于开源协议,任何人都可以得到项目的源代码,加以学习、修改,甚至是重新分发。关注「开源日报」,一文速览国内外今日的开源大事件吧! 一分钟速览新闻点! 开源大新闻 前所未见的后门恶意软件,通杀 Win、macOS、Linux 三大系统全球三大唱片公司起诉 Youtube-dl 的

英语基础课2,定语使用规则下篇;_小小小糖果人的博客-爱代码爱编程

1、形容词短语(形容词+介词)         1.1 肥胖的人喜欢吃高脂肪和高糖的食物         Fat people like eating food(high in fat and sugar)        1.2  我的房东是一个对钱很敏感的人         My landlord is a person (sensitive t

你该知道的pyecharts简易上手教程_aristan_w的博客-爱代码爱编程

最近领导甩给我两张报表,让我实现报表的联结和可视化展现,要求是通过代码实现,使得每天花费在这项工作上的时间越短越好,要求查询精确,还要漂亮丰富多彩。 数据查询的工作,我会在后期的文章中展现,因为文件涉及到公司内部资料,后期我

国产办公软件崛起,金山wps月活用户已超5.7亿;meta指责苹果夺走部分广告收入;python 3.11 发布_蒋炳楠的博客-爱代码爱编程

一分钟速览新闻点! 国产办公软件崛起 金山WPS月活用户已超5.7亿 美团开始招聘香港工作人员 第一代没人用!台积电第二代3nm工艺首颗芯片流片 华为因专利纠纷起诉亚马逊 目前正着手全球维权行动 抖音经办负责人朱时雨转任生活服务负责人,抖音战略团队或部分分拆 全球量子计算专利百强公布:华为、腾讯、阿里等15家中国公司入围 苹果详解 M2 芯片版

现代卷积神经网络之稠密连接网络(densenet),并对cfiar10训练-爱代码爱编程

专栏:神经网络复现目录 本章介绍的是现代神经网络的结构和复现,包括深度卷积神经网络(AlexNet),VGG,NiN,GoogleNet,残差网络(ResNet),稠密连接网络(DenseNet)。 文章目录

web漏洞-xss-爱代码爱编程

XSS漏洞 原理: WEB 应用程序混淆了用户提交的数据和 JS 脚本的代码边界,导致浏览器把用户的输入当成了 JS 代码来执行。XSS 的攻击对象是浏览器一端的普通用户。 分类: 存储型:持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执

python 3.11即将发布,这5个实用新功能,你还不知道嘛_python 3.11新功能-爱代码爱编程

Python 3.11即将发布,这5个实用新功能,你还不知道嘛 Python 3.11快发布了,每个新版本都带有新功能。在本文中,我们将介绍令人期待的Python 3.11的5个很酷的新功能。 1.比3.10版本快了60

医疗项目业务以及表设计介绍_设计大数据医疗管理目录-爱代码爱编程

目录 1. 业务介绍 1.1 门诊挂号流程: 1.2 住院流程: 2. 基本数据模块  3. 页面原型初稿(门诊)介绍  3.1 个人档案 3.2 门诊卡 3.3 门诊卡详情 3.4 患者费用账单 3.5 医院烂账记录 3.6 接诊记录 3.7 医生看病流程 3.8 医生诊断结果 3.9 治疗方案 3.10 LIS检验