首先來看這一段話
Kafka使用短輪詢方式,實時性取決於輪詢間隔時間
RocketMQ使用長輪詢,同Push方式實時性一致,消息的投遞延時通常在幾個毫秒。
看起來雲裏霧裏的,那麼長輪詢和短輪詢到底有什麼區別?
短輪詢
- 短輪詢是服務器收到請求不管是否有數據都直接響應請求
- 受到響應隔一段時間在發送同樣的請求查詢是否有數據;
缺點:
- 實時性低
長輪詢
- 長輪詢是服務器收到請求後如果有數據, 立刻響應請求;
- 如果沒有數據就會 hold 一段時間,這段時間內如果有數據立刻響應請求;
- 如果時間到了還沒有數據, 則響應 http 請求;瀏覽器受到 http 響應後立在發送一個同樣http 請求查詢是否有數據;
缺點:
- 瀏覽器端對統一服務器同時連接有最大限制, 最好同一用戶只存在一個長輪詢;
- 服務器端沒有數據 hold 住連接時會造成浪費, 容易產生服務器瓶頸;