阿里云國際站經(jīng)銷商,主營阿里云,騰訊云,華為云,亞馬遜aws,谷歌云gcp,微軟云az,免費(fèi)開戶,代充值優(yōu)惠大,聯(lián)系客服飛機(jī)@jkkddd


長輪詢

本文介紹消息服務(wù)MNS中使用LongPolling的最佳實(shí)踐。
背景信息
消息服務(wù)MNS提供了LongPolling類型的接收消息的方法,在接收消息的時(shí)候把等待時(shí)間設(shè)置在1s~30s。使用LongPolling可以讓請求一直在服務(wù)器上運(yùn)行,等到有消息的時(shí)候才返回。既可以保證第一時(shí)間收到消息,又避免您發(fā)送大量無效請求。LongPolling是消息服務(wù)MNS的推薦用法。
LongPolling參數(shù)設(shè)置,請參見ReceiveMessage。
LongPolling需要HTTP層的長連接保持在服務(wù)器上,而對于服務(wù)器來說,HTTP層的長連接的資源是有限的。為了避免受到惡意攻擊,消息服務(wù)MNS對單用戶的每個Queue的連接數(shù)是有限制的。具體信息,請參見使用限制。
問題描述
您在單臺機(jī)器上開啟上百個線程,即發(fā)送上百個LongPolling的請求,同時(shí)訪問消息服務(wù)MNS服務(wù)器獲取消息。如果您使用了多臺機(jī)器,那么可能同時(shí)發(fā)送上千個LongPolling的請求。
此時(shí)隊(duì)列中沒有消息,如果您再次發(fā)起LongPolling,消息服務(wù)MNS服務(wù)器就會返回:消息不存在。
因此,如果您是在一個While循環(huán)里不停的做LongPolling請求,而沒有做異常處理,會導(dǎo)致您發(fā)送了大量的請求,不能達(dá)到使用LongPolling的預(yù)期效果。
解決方案
當(dāng)您打開上百個線程同時(shí)訪問消息服務(wù)MNS服務(wù)器時(shí),如果隊(duì)列里已經(jīng)沒有消息,就不需要上百個線程同時(shí)運(yùn)行LongPolling。此時(shí)只需要打開1~N個線程運(yùn)行LongPolling。當(dāng)運(yùn)行LongPolling的線程發(fā)現(xiàn)隊(duì)列里有消息時(shí),喚醒其他線程一起接收消息,達(dá)到快速響應(yīng)的目的。
長輪詢示例代碼是一個使用MessageReceiver獲取消息的最佳實(shí)踐。所有獲取消息的線程都新建了MessageReceiver,使用receiver.receiveMessage來獲取消息。
MessageReceiver內(nèi)部做了LongPolling的排他機(jī)制,只要有一個線程在做LongPolling,其它線程就需要等待。

心靈雞湯:

標(biāo)題:阿里云賬號注冊,阿里云代理商代購

地址:http://www.tantricheartwheels.com/kfxw/64307.html