架構如圖所示
[attach]1740[/attach]
問題在于圖中紅色部分。
?
BW在?onWorkerStart 發(fā)起?AsyncTcpConnection? 連接邏輯層,在 AsyncTcpConnection 的?onConnect?回調(diào)中,開啟定時器發(fā)送心跳連接和處理任務.
?
如果心跳連接的頻率過快,或者說 BW與邏輯層 頻繁的雙向通訊,會阻塞BW進程嗎?比如:GW和邏輯層同時發(fā)送信息過來,是會同時處理還是會誰先就處理誰的先?
?
看了異步任務里面的demo,都是接收到數(shù)據(jù)就關閉連接,由于?BW與邏輯層是頻繁的雙向通訊,如果收到數(shù)據(jù)就關閉連接,這樣BW和邏輯層兩邊都得頻繁發(fā)起連接,感覺會加重負擔。
我的想法是,每一個BW發(fā)起的一個異步連接邏輯層(僅此一個),BW里面有一個任務隊列,任務隊列通過這個連接發(fā)送任務與接受結果(此處不阻塞BW與GW的通訊),接受到結果,再把結果主動推送到客戶端上。
?
模擬一下場景,ABCD連接到GW,A發(fā)送‘踢掉D連接’給GW,GW收到信息轉(zhuǎn)發(fā)給BW,BW收到信息立馬回復'消息已收到',然后把A的消息壓入任務隊列,此時BW里面的AsyncTcpConnection正在發(fā)送任務給Logic層,那么這時候A的消息能不能壓入任務隊列?Logic層收到任務,處理到一半通知BW‘踢掉D連接’,然后又通知BW'順帶踢掉C'(這里可能是主動通知),后面又可能因為A的消息,Logic層會間斷的主動通知BW踢人
?
?
?
?
?
?