老大,你帮我看下观点有啥问题? 还有我没找到的答案的问题
WebSocket是一种全双工的通信协议,可以在浏览器和服务器之间建立持久化的连接,并实现双向通信。
1.全双工通讯
定义
-
全双工通讯:就像打电话,双方可以同时说话。就是说通信双方可以同时发送和接收消息
-
半双工通讯:在一个时间只能一方发送消息。比如对讲机
-
单工通信:单工通道只能实现单向通信,数据只能从发送方传输到接收方,不能反向传输数据。适用于一些监控和控制场景,例如环境监测、工业控制等
对比:
-
半 适合频繁交替发言的场景,类似对讲机,辩论
-
全 适合通信速度和降低延迟需求较高的场景,比如通话、视频···
-
半 避免数据冲突,实现更简单
示意图:
如果双方需要进行全双工通信,需要都支持双工通信,而且有较高的通信带宽和设备要求
2. 实现前后端长连接的方式
按照我接触到的业务场景,长连接是为了实时获取后端的数据。这让我想起来react里面的useEffect,不过虽然可以根据依赖项的变化来执行一些操作,但是有一些场景是需要后端主动给前端发数据。比如,消息弹窗需要后端主动推送消息
长连接的概念:客户端和服务端持久连接,后端可以主动向客户端发送消息。
-
websocket
-
长轮询(long polling),不是真正的长连接。客户端发送请求,后端挂起,直到有消息可以响应或者超时了,后端就响应并关闭连接
-
【短轮询】和长轮询相似,不是真正的长连接。因为短轮询是前端定时不断的向后端发送请求=》后端收到=》后端响应
长轮询和短轮询都会频繁的建立和关闭连接。都挺消耗网络资源、带宽的。
问题
-
它们的连接关闭都是服务端主动断开的。为什么不让客户端主动断开?
:客户端发送请求,主动关闭的话,会导致服务端不能响应。没啥意义,
3. websocket是一种协议,能够实现真正的长连接
是的。是基于http协议的应用层协议。
问题
观点来源:websocket解决了连接协商和同源策略的问题
-
连接协商是什么意思?
:是连接前的http握手和tcp三次握手。作用是:进行连接前的身份确认和支持协议,和建立可靠的数据传输
-
http握手和tcp握手的区别
:websocket连接时先进行tcp三次握手确定通信双方都有发送和接收消息的能力,然后再进行http握手确定双方使用的网络协议和身份。
-
为什么说websocket是一次握手?区别在哪里
:因为websocket连接时,先进行http握手再进行tcp三次握手,http握手在这个过程中存在感比较强,所以有的人观点是websocket是一次握手。但是这是不准确的。
-
那为何websocket连接时http握手在前????
:因为设计的目的和作用不一样, websocket是在http协议之上的,需要使用http协议中的Upgrade和connection字段来升级连接,所以http握手在前,然后tcp三次握手建立可靠连接,实现websocket连接。
:而http协议在tcp协议之上,需要先建立可靠的连接,然后进行http握手,实现http连接。
问题 111
感觉上面这个问题的回答不够分量,还是不太明白????
-
http连接时的http握手使用了SHA-1吗?
:没有
-
和普通http连接的区别
:普通http连接时先进行tcp三次握手再进行http连接。而websocket是先http握手再tcp三次握手。
:websocket再次传输数据不需要 断开再连接
:websocket 让服务端可以主动发送消息给客户端
:websocket连接时加密,而http时明文传输
:websocket可以传输更加复杂的数据,除了文本和二进制【http可以】,还可以是json,xml··· :
-
同源策略是怎么解决的
:websocket使用了自定义的协议头 ws:// wss://,而不是http:// https:// 。浏览器对它的协议头没有同源策略的限制 :可以在客户端和服务端建立持久连接,而不是在浏览器和服务端之间建立。而同源策略主要是限制浏览器中一个网站的文档和资源被其他网站访问。
问题2222
第二个理由,websocket连接在客户端和服务端之间建立,但是很多文章啥的说的是浏览器和服务端,那第二个理由咋能证明它可以解决同源策略?????
-
浏览器和客户端的区别
:
-
websocket连接在进行http握手的时候,使用SHA-1 的作用是啥?
:加密,就像手机打开有密码,输入的密码正确才能玩。可以确认双方的身份信息,是不是要连接的通信方,保证了websocket连接的安全和正确。
-
除了SHA-1还有别的方法确保连接的的安全性嘛
:使用 wss ,跟https类似,使用了SSL/TLS加密