firemail
标题:
轮询、长轮询、长连接、WebSocket
[打印本页]
作者:
Qter
时间:
2023-7-11 15:54
标题:
轮询、长轮询、长连接、WebSocket
一、轮询
简单来讲,就是客户端每隔一段时间不断向服务端发送请求,无论服务器端请求有无更新,都会响应。以此达到,一定时间段内,获得服务端的数据,以便观察数据的更新。
但这种方法是由于不断地发起请求来实现的,不免会造成资源的浪费;且在客户端增多的情况下,会导致服务器的压力增大。
二、长轮询
简单来说,就是客户端向服务端发起请求,但是服务端不立即回应,而是利用死循环,使之不断检测数据的变动,数据发生改变时,向客户端发起响应。再一次收到请求时,再次进入循环。
在未响应的时间里,http一直处于连接状态,响应后,断开连接。
这种方式由于请求在无数据更新的时间里会被一直挂起,也会造成资源的浪费,且需要服务器一直在循环中监测数据的变动。
长轮询的终止情况:
1.有新数据推送
2.时间过长,程序超时,自动断开连接
3.网络错误,返回错误信息
三、长连接
HTTP连接是请求/响应模式,只要客户端请求,服务端响应之后,连接就关闭。所以长连接和短连接是相对于TCP连接来说的。TCP连接是可保持一段时间的双向传输的连接。
HTTP协议是应用层协议,TCP协议是传输层协议。所以HTTP是没有连接这一说的,可以说HTTP请求和HTTP响应。
长连接就是请求一次且服务端响应过后,TCP连接不断,当再次请求时,依旧使用这个TCP连接。且在连接过程中,不需要客户端发起请求,服务端就可以发送数据给客户端。但是这个长连接不是永久的,可在header中设置超时时间,只要在设置时间内,客户端没有请求,过后连接自动断开。
1、HTTP1.1之前都是没有长连接的,而HTTP1.1之后默认都是长连接。
2、当我们在客户端和服务端的connection都设置为keep-alive时,就表明它是长连接了。
四、WebSocket
WebSocket是独立的,基于TCP的协议,是由HTML5定义规范的。WebSocket也是为了实现客户端和服务端的双向通信,但是客户端请求,服务端回应,进行一次握手后,连接一直持续不断开。两者地位相同,不存在请求,响应的区别
在网页的Network中可查看HTTP状态码,为101,就表示是WebSocket方式连接。
————————————————
版权声明:本文为CSDN博主「顾九七」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:
https://blog.csdn.net/qq_44681872/article/details/112752449
欢迎光临 firemail (http://firemail.wang:8088/)
Powered by Discuz! X3