WebSocket——“舔狗”Http的升级之路
一:基础了解——HTTP
超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。
对于WebSocket我们首先需要明白其本质还是一种协议和我们之前使用的http类似的网络协议,主要功能都是为了完成通信。我们都知道的HTTP的通信方式概括来看就是请求——应答式的模型。即当客户端有需要时,就先服务器端发送请求,进而获取资源数据。
此时其实消息传送的主动权在与客服端,而服务器端则是显得很高冷,从来不会向客户端主动发送任何的请求信息。
此时的客户端相当于一个“舔狗”,主动向服务器发送消息,而服务器在不“宕机”的情况下还是很礼貌的,基本有求必应。
客户端:我在上课
服务器端:上的什么课?
客户端:想你的每一刻
服务器端:..........(宕机)
客户端
二:升级之路——WebSocket
WebSocket是一种通信协议,可在单个TCP连接上进行全双工通信。WebSocket使得客户端和服务器之间的数据交换变得更加简单, 允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就可以建立持久性的连接, 并进行双向数据传输。
WebSocket是一种通信协议,区别于HTTP协议,HTTP协议只能实现客户端请求,服务端响应的这种单项通信。 而WebSocket可以实现客户端与服务端的双向通讯。其最大的优势在于:可以主动将信息推送至客户端。
webSocket特点
三:WebSocket出现前的实时通讯
在WebSocket出现之前如果想实时获取后台数据信息 ,则最常用的方式有两种:ajax定时查询,long poll长查询。
ajax轮询的原理非常简单,让浏览器隔个几秒就发送一次请求,询问服务器是否有新信息
客户端舔狗日记:2021-6-18 晴
客户端:在?吃饭了吗?(Request)
服务端:没有(Response)
客户端:在?下班了吗?(Request)
服务端:没有。(Response)
客户端:在?一起出去玩么?(Request)
服务端:你好烦啊,不去 。(Response)
客户端:在?有没有有趣的事?(Request)
服务端:有,最近全网纷传“校长爱情”。(Response)
客户端:在?睡了吗?(Request)
服务端:。。。。。。。。。。。。(Response) —- loop
long poll
其实原理跟 ajax轮询
差不多,都是采用轮询的方式,不过采取的是阻塞模型(一直打电话,没收到就不挂电话),也就是说,客户端发起连接后,如果没消息,就一直不返回Response给客户端。直到有消息才返回,返回完之后,客户端再次建立连接,周而复始
场景再现:
客户端:啦啦啦,有没有新信息,没有的话就等有了才返回给我吧(Request)
服务端:额。。 等待到有消息的时候。。来 给你(Response)
客户端:啦啦啦,有没有新信息,没有的话就等有了才返回给我吧(Request) -loop
从上面可以看出其实这两种方式,都是在不断地建立HTTP连接,然后等待服务端处理,可以体现HTTP协议的另外一个特点,服务端不会主动联系客户端,只能有客户端发起。
四:WebSocket连接过程
客户端发起HTTP握手,告诉服务端进行WebSocket协议通讯,并告知WebSocket协议版本。服务端确认协议版本,升级为WebSocket协议。之后如果有数据需要推送,会主动推送给客户端。
连接开始时,客户端使用HTTP协议和服务端升级协议,升级完成后,后续数据交换遵循WebSocket协议。我们看看Request Headers
当建立连接后相当于客户端和服务器 进行了一次协商,即当有消息的时候再通知,而无需客户端每次实时查询处理。
webSocket请求信息
其中关键的字段就是Upgrade,Connection,告诉 Apache
、 Nginx
等服务器:注意啦,我发起的是Websocket协议,不再 使用原先的HTTP。
其中,Sec-WebSocket-Key:
对应服务端响应头的Sec-WebSocket-Accept,由于没有同源限制,websocket客户端可任意连接支持websocket的服务。这个就相当于一个钥匙一把锁,避免多余的,无意义的连接
Sec-WebSocket-Version
是告诉服务器所使用的(协议版本)号。
然后服务器会返回下列东西,表示已经接受到请求, 成功建立Websocket啦
Sec-WebSocket-Accept: 用来告知服务器愿意发起一个websocket连接, 值根据客户端请求头的Sec-WebSocket-Key计算出来。
至此,在响应头信息中也表明协议升级到WebSocket之下,此时客户端和服务器端的WebSocket连接也已经建立完成。
参考文章:https://juejin.cn/post/6844903606211215373
我,毅航同学。一名山大的普通计算机研究生,业余读读书,总结技术学习上的感悟。希能帮助到你。欢迎你同我一起进步,一起交流。
B站同名用户:有问题私信即可,共勉~~~~
WebSocket——“舔狗”Http的升级之路相关推荐
- OSChina 周日乱弹 —— 做一只舔狗,开心时就去舔她,不开心时就舔自己
2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单(2019)请戳(这里) [今日歌曲] @温家成 :分享连诗雅的单曲<水星逆行> <水星逆行& ...
- 第一章 舔狗不得house
第一章 舔狗不得house "咣咣咣!" 一阵急促的敲门声惊醒了屋内沉睡的人. 杨潇随意披了件衣裳,朦胧的眼睛蕴含一丝怒气,不情愿的开了门. "杨潇,你半月前不是说想帮我 ...
- 随笔——别做一个媚外的舔狗
本文章转自甲大的公众号,甲大的文字比较刚,但是写的内容还是不错的,我挺喜欢甲大,有胆量,有追求的一个同龄人. 「舔狗」一词在18年一时间火遍全国,大家应该都知道舔狗什么意思. 现在舔狗一词已经不仅仅只 ...
- 产品经理舔狗话术指南
我决定放下了,不再执着于撕逼. 从明天开始,做一个温和的产品经理,劈柴喂马,周游世界,面朝大海,做只舔狗. 愿意加入我的,这里有一份舔狗指南,请背诵全文并灵活使用: 对程序员 日常路过--听着悦耳的键 ...
- 舔狗舍友浪子回头决心要跟着我好好学网络?问我有哪些软件是必装的?
"你上次说的知识我已经了解了一些,原来学网络也没有那么难,至少比追学长简单多了!"还在追学长?不是已经被拉黑了吗? "咳咳,不是上次那个,又换了个目标!"看着我 ...
- 女友让我破解植物大战僵尸!我干脆撸了一款一样的....翻身舔狗把歌唱呀
今天给大家分享的开源项目可以说非常适合入门,还比较好玩,更是一个有故事的项目.既能满足想学习的读者,又能满足那些喜欢八卦的读者. 提到植物大战僵尸相信大部分读者都不陌生,可以说是塔防类游戏的鼻祖.就鸟 ...
- 钉钉自定义机器人python_使用钉钉自定义机器人发送舔狗日记[70行][python]
[Python] 纯文本查看 复制代码# -*- coding: utf-8 -*- import requests import json import time #下面是解密用到的模块 impor ...
- 低能量社交时代,我们都成了小心翼翼的「舔狗」
"舔狗"是互联网"犬系"黑话中的当红炸子鸡,继"单身狗"."累成狗"."狗粮"之后迅速C位出道. 在 ...
- 京东横刀,堵了拼多多“升级”的路
文|潇雅 来源 | 潇湘财经(XiaoxiangFin) 1 商品流也有价值体系 今年的4月是个多事之秋,自快手.火山小视频被下架后,内容资讯领域掀起了一番整改的腥风血雨.先是快手宿华的诚恳道歉,到今 ...
最新文章
- BZOJ 1799 [Ahoi2009] self 同类分布(数位DP)【BZOJ千题计划(quexin】
- 大量POI点展示的一种解决方案
- a=a+b与a+=b有什么区别吗?
- 让逻辑关系破缺的最小空间尺寸
- java学习论坛汇总
- 【机器学习基础】一文归纳AI数据增强之法
- 【转】ELK是什么能做什么怎么做
- java 数组 转set_java中的list,set,数组之间的转换
- WFDB软件包简介——ECG数据在Matlab下的读取/显示方法
- UVA11082 行列模型
- SpringMVC的Restful风格
- 通信原理6.2-6.4码型及码间串扰
- pm2开机启动项目脚本
- 你要的电子书下载网站
- WordPress重新安装的几种方法(2022年新版教程)
- iphone有关QQ和微信无法收到推送通知的终极解决方案
- 源码分析mmc体系结构
- 网络负载均衡优化RPS实现简介
- 任务16:16_Flume案例_断点续传文件(案例测试)
- 非对称加密(RSA、数字签名、数字证书)
热门文章
- 条码软件如何修改条码下面数据的字符间距
- pringboot冬奥会竞赛项目知识网站的设计与实现 毕业设计-附源码152337
- 程序员还不知道简历怎么写?教你如何写简历!简历写得好,offer不会跑!
- Android完美播放优酷视频
- 解决使用下拉组件报错:Error in callback for watcher “focusing“: “TypeError: Cannot set property className......
- Computer Vision_33_SIFT:Distinctive Image Features from Scale-Invariant Keypoints——2004
- 【HNOI 2015 开店】【动态点分治 + 前缀和】
- 测试app软件兼容性,App兼容测试,你中招了嘛
- uniapp对接腾讯云IM+音视频。音视频含UI集成
- 计算机仿真碰撞软件,某型轿车侧面碰撞计算机仿真分析