Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 388|回复: 0
打印 上一主题 下一主题

轮询、长轮询、长连接、WebSocket

[复制链接]

1228

主题

1997

帖子

7582

积分

认证用户组

Rank: 5Rank: 5

积分
7582
跳转到指定楼层
楼主
发表于 2023-7-11 15:54:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、轮询
简单来讲,就是客户端每隔一段时间不断向服务端发送请求,无论服务器端请求有无更新,都会响应。以此达到,一定时间段内,获得服务端的数据,以便观察数据的更新。
但这种方法是由于不断地发起请求来实现的,不免会造成资源的浪费;且在客户端增多的情况下,会导致服务器的压力增大。

二、长轮询
简单来说,就是客户端向服务端发起请求,但是服务端不立即回应,而是利用死循环,使之不断检测数据的变动,数据发生改变时,向客户端发起响应。再一次收到请求时,再次进入循环。
在未响应的时间里,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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-5-2 23:56 , Processed in 0.054147 second(s), 19 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表