到底什么是长轮询?

476 阅读2分钟

是什么

就是请求不立马断开,而是保活一段时间。超时之后,断开,然后客户端再次和服务器建立连接。

http请求是请求/响应,完成之后,立马断开。

所以,长轮询的意思就是,长的意思,是保活长连接,即一般是很短的一段时间内(比如1m)不断开,在这1m时间内,服务器如果有新数据就主动写到客户端。轮询的意思是,1m之后,连接断开,客户端再次和服务器建立连接,也就是多次不停地建立1m的连接。

应用场景

apollo

有了1m的长连接,为什么还要5m一次的短连接,防止1m长连接的时候,服务器push功能失效。


rocketmq

也是一样,客户端和服务器建立长连接(也是短时间内的保活长连接),在每次的长连接期间,服务器如果有数据就主动写数据到客户端。


总结

除了长轮询机制一样,还有注册中心也是一样,apollo和rocketmq都使用了注册中心,其实所有的中间件基本上都是这样,如果要集群(一般多主多从),就要搞注册中心。

好处

push模型的好处是实时写新的数据到客户端。pull模型的好处是请求/响应模式,完成之后就断开,而不是像push模型一样,一直长连接不断开,如果每个连接都不断开,那么服务器连接数量很快会被耗尽。

长轮询的好处是,既有push模型的服务器实时写数据到客户端,又有pull模型的避免一直长连接。

总结

1.主动权
为什么说主动权在客户端,因为定时的时间间隔是由客户端控制的,客户端想要数据就要数据,想不要数据就不要数据,想什么时间间隔要数据就什么时间间隔要,想什么时间要就什么时间要。

2.缺点
虽然不像push模型一样,长连接一直不断开,但是毕竟也占用了一小段时间,只要不是用完立马断开的情况,都是要在短时间内耗费大量连接数量的,所以长轮询只适合客户端数量比较少的情况,比如apollo的配置中心,比如消息中间件的消息队列,客户端都不是很多,就几个。


客户端可以控制处理数据的速度