国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

關(guān)于GatewayWorker框架中,多個(gè)gateway,businessworker中,不同gateway客戶端如何通信疑惑?

frank

背景(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框架源代碼,還是不太明白,求教各位

3652 1 0
1個(gè)回答

phpcreeper

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ā);

  • frank 2019-06-11

    感謝細(xì)心的回復(fù),
    1.c1---->gateway網(wǎng)關(guān)確實(shí)是隨機(jī)的,源代碼是通過array_rand()隨機(jī)獲取一臺(tái)gateway,上面情況是假設(shè)到gateway_1

    1. 嗯,這點(diǎn)是明白了,從源碼中看到,每個(gè)客戶端和gateway建立連接時(shí),會(huì)封裝一個(gè)gatewayHead對(duì)象,記錄了這個(gè)client是和哪個(gè)gateway建立連接的,并通過_allConnections[connection_id]=gatewayHead存儲(chǔ),方便識(shí)別接收連接是和哪個(gè)gateway連接,確定轉(zhuǎn)發(fā)路線。
      3.組內(nèi)廣播還是有一個(gè)疑問,gateway_1和gateway_2為兩臺(tái)單獨(dú)服務(wù)器,gateway_1和gateway_2服務(wù)器維持各自的客戶端,現(xiàn)在需要給c1,c2,c3,c4廣播消息,我理解的流程如下;
      1) gateway_1 循環(huán)遍歷該分組數(shù)組中所有客戶端,假設(shè)其中c1----->bussinessWorker_1,
      2) 在businessWorker_1中omGatewayMessage中根據(jù)消息類型,如果是group_broadcast類型即廣播,直接轉(zhuǎn)到和bussinessWorker_1有建立連接的所有g(shù)ateway,此處只有g(shù)ateway_2, 在gateway_2中獲取指定分組所有client, 進(jìn)行轉(zhuǎn)發(fā)。
  • phpcreeper 2019-06-11

    沒錯(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ā)。

  • frank 2019-06-11

    感謝指導(dǎo)分享

年代過于久遠(yuǎn),無法發(fā)表回答
??