1、序言
??在學(xué)習(xí)RocketMQ源碼的時候铐达,發(fā)現(xiàn)有幾個概念比較模糊岖赋,長連接、長輪詢與短輪詢瓮孙。
??在翻閱相關(guān)資料之后唐断,這里就粗談一下這三個概念的區(qū)別吧选脊。
2、長連接
??長連接栗涂,client向server發(fā)起連接請求后知牌,連接不斷開。client一發(fā)起請求斤程,server就會立即響應(yīng)角寸。
??因此,長連接也比較消耗IO資源忿墅。
??除此之外扁藕,長連接也會帶來另外一個問題。如果client消費消息能力低疚脐,會造成消息積壓亿柑,而一旦造成消息積壓,可能就會觸發(fā)server的重投機制棍弄,這就會引發(fā)重復(fù)消息問題望薄。會造成這一問題,是因為server無法知道client是否消費了呼畸。
3痕支、長輪詢
??長輪詢,client向server發(fā)起連接請求后蛮原,如果server有資源卧须,則立即響應(yīng);如果server沒有資源儒陨,則將連接IO掛起花嘶,直到有資源之后,再啟動掛起IO向client端發(fā)送蹦漠。
??相比長連接椭员,長輪詢沒有那么消耗IO資源。在長輪詢中津辩,client掌控著主動權(quán)拆撼,client需要什么消息,就會向server發(fā)起喘沿,如此一來就不會造成消息積壓的問題闸度。
4、短輪詢
??相比前面兩種蚜印,短輪詢比較簡單莺禁。client一旦與server建立起了連接,server有無資源窄赋,都會向client響應(yīng)哟冬。如果server無資源楼熄,那么就只會響應(yīng)報文。