背景(gatewayWorker框架):
有兩臺(tái)gateway服務(wù)器,分別為gateway_1, gateway_2
兩臺(tái)businesswork服務(wù)器,分別為businesswork_1, businesswork_2
假設(shè)有4個(gè)客戶端,c1, c2, c3, c4,其中 c1和c2連接到gateway_1上, c3和c4連接到gateway_2上
并且c1, c2, c3, c4為同一個(gè)分組,如下所示
[attach]2150[/attach]
?
?
問題1:
c1給c4發(fā)送消息,在gatewayWorker內(nèi)部是如何實(shí)現(xiàn)的?看了手冊(cè),自己理解為如下流程:
c1----->gateway_1轉(zhuǎn)發(fā)消息---------->businessWorker_1處理完業(yè)務(wù)-------------->gateway_2轉(zhuǎn)發(fā)消息------------>c4
相當(dāng)于在businessWorker_1處理完后,通過businessWorker_1和gateway_2已經(jīng)建立好的TCP連接來轉(zhuǎn)發(fā)數(shù)據(jù),內(nèi)部有什么機(jī)制嗎?
?
問題2:
c1, c2, c3, c4是一組,如果給這個(gè)組廣播消息,內(nèi)部是如何實(shí)現(xiàn)的呢?
?
看了gatewayWorker框架源代碼,還是不太明白,求教各位
1、首先?c1----->gateway_1轉(zhuǎn)發(fā)消息 ---------> 【這里不一定是businessWorker_1處理處理業(yè)務(wù),因?yàn)檫@里內(nèi)置默認(rèn)是隨機(jī)的worker路由選擇策略】
2、假設(shè)是businessWorker_1處理消息 -------> gateway_2轉(zhuǎn)發(fā)消息------------>c4 , 根據(jù)圖示實(shí)際例子,?這里的原理就是:
(1)無論是站在gateway側(cè),還是businessworker側(cè)來看,總共維持了? 2 * 2 = 4 個(gè)tcp 連接;
(2)關(guān)鍵就在于 businessWorker_1 會(huì)通過gateway_2 這條通道將消息轉(zhuǎn)發(fā)給c4,因?yàn)閏4對(duì)應(yīng)的client_id 是由?gateway_local_ip + gateway_local_port + connection_id 唯一確定的;
3、至于組內(nèi)廣播原理大致是:
(1)首先理解了上面那個(gè)原理,組播或廣播就不難理解了;
(2)每個(gè)gateway進(jìn)程都會(huì)維護(hù)一個(gè)相應(yīng)的數(shù)組結(jié)構(gòu),該數(shù)組保存了加入到當(dāng)前組的所有客戶端對(duì)象;
(3)當(dāng)組播或廣播時(shí),每個(gè)gateway進(jìn)程內(nèi)逆向遍歷出對(duì)應(yīng)的客戶端對(duì)象,進(jìn)而實(shí)現(xiàn)數(shù)據(jù)的轉(zhuǎn)發(fā);
感謝細(xì)心的回復(fù),
1.c1---->gateway網(wǎng)關(guān)確實(shí)是隨機(jī)的,源代碼是通過array_rand()隨機(jī)獲取一臺(tái)gateway,上面情況是假設(shè)到gateway_1
沒錯(cuò),組播或廣播的流程細(xì)節(jié)大致就是你描述的那樣:
即每一個(gè)bussinessworker進(jìn)程都做同樣的工作去和每個(gè)gateway進(jìn)程通信,然后每個(gè)gateway進(jìn)程遍歷當(dāng)前維持的業(yè)務(wù)數(shù)組并路由出當(dāng)前進(jìn)程所維護(hù)的connection對(duì)象,然后各自獨(dú)立完成數(shù)據(jù)的轉(zhuǎn)發(fā)。