1、序言
在学习RocketMQ源码的时候,发现有几个概念比较模糊,长连接、长轮询与短轮询。
在翻阅相关资料之后,这里就粗谈一下这三个概念的区别吧。
2、长连接
长连接,client向server发起连接请求后,连接不断开。client一发起请求,server就会立即响应。
因此,长连接也比较消耗IO资源。
除此之外,长连接也会带来另外一个问题。如果client消费消息能力低,会造成消息积压,而一旦造成消息积压,可能就会触发server的重投机制,这就会引发重复消息问题。会造成这一问题,是因为server无法知道client是否消费了。
3、长轮询
长轮询,client向server发起连接请求后,如果server有资源,则立即响应;如果server没有资源,则将连接IO挂起,直到有资源之后,再启动挂起IO向client端发送。
相比长连接,长轮询没有那么消耗IO资源。在长轮询中,client掌控着主动权,client需要什么消息,就会向server发起,如此一来就不会造成消息积压的问题。
4、短轮询
相比前面两种,短轮询比较简单。client一旦与server建立起了连接,server有无资源,都会向client响应。如果server无资源,那么就只会响应报文。