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