這個(gè)圖 有些地方?jīng)]有看懂 就是 worker 進(jìn)程 是怎么從多個(gè)gateway里面選擇一個(gè) 轉(zhuǎn)發(fā)給客戶端的
gateway進(jìn)程 又是怎么從多個(gè)worker里面選擇一個(gè)來(lái)處理的 追源碼的時(shí)候沒(méi)有看見(jiàn)這里面的流程
可以用worker進(jìn)程 從多個(gè)gateway 進(jìn)程選擇選擇一個(gè)說(shuō)明一下。
題外話
大大的源碼里注釋相當(dāng)人性化了,而且好多地方還都是中文注釋呢,那么明顯的實(shí)現(xiàn)說(shuō)看不見(jiàn)不合理呀,只能說(shuō)還是你源碼看的多少粗暴。
首先建議把官方手冊(cè)介紹的原理先熟讀一遍,然后咱們分享細(xì)節(jié)
http://www.wtbis.cn/doc/gateway-worker/principle.html
上面的工作做好了,且為了方便表述問(wèn)題,我們做如下上下文設(shè)定
先說(shuō)client和gateway通信
再來(lái)說(shuō)一下gateway和worker通信
當(dāng)worker進(jìn)程返回?cái)?shù)據(jù)給設(shè)定的客戶端時(shí)【其實(shí)是events代理幫干的】,會(huì)根據(jù)client_id反解出相應(yīng)的gateway進(jìn)程的內(nèi)部IP、端口, 這樣worker-3進(jìn)程自然就知道該連接哪個(gè)gateway進(jìn)程了,這里自然就是我們?cè)O(shè)定的gateway-2進(jìn)程。
1 client-7發(fā)起連接,此時(shí)所有的gateway進(jìn)程受內(nèi)核調(diào)度遴選出gateway-2進(jìn)程處理客戶端連接; 這個(gè)第一步 不是workerman 實(shí)現(xiàn)的嗎? 怎么變成內(nèi)核調(diào)度選出gateway-2
workerman實(shí)現(xiàn)了多進(jìn)程模型以及網(wǎng)絡(luò)IO管理,但是到底由哪個(gè)進(jìn)程來(lái)處理哪個(gè)TCP連接,workerman沒(méi)有調(diào)度權(quán)【不要忘了一開(kāi)始的上下文設(shè)定,若非要舉一種特例:那就是在多worker+單進(jìn)程模式下,開(kāi)發(fā)者還是有權(quán)決定讓哪個(gè)進(jìn)程來(lái)處理哪個(gè)連接,其實(shí)想想只不過(guò)是路由到不同的端口,然后交給唯一的一個(gè)子進(jìn)程處理而已,只有一個(gè)子進(jìn)程干活還用遴選嗎?所以僅僅是一種特例而已】
再來(lái)說(shuō)一下gateway和worker通信, 那gateway與worker通信, 從多個(gè)worker 里面選擇一個(gè) 也是內(nèi)核調(diào)度的嗎
這種情形當(dāng)然是可以從業(yè)務(wù)層面調(diào)度的【我們也知道gatewayworker框架已經(jīng)幫代勞了】,但是它和上面描述的情況根本就不是一碼事,因?yàn)榇藭r(shí)選擇哪個(gè)worker來(lái)處理是建立在先前worker已經(jīng)連接到gateway基礎(chǔ)之上這個(gè)大背景下的,但是反方向過(guò)來(lái)那就又變成了只能是內(nèi)核調(diào)度,要理解這微妙的區(qū)別,必須先把誰(shuí)是客戶端,誰(shuí)是服務(wù)端的相對(duì)角色厘清,因?yàn)槿p工的不同方向通信手段是不盡相同的。
嗯 基本上懂了 我們選定研究對(duì)象: client-7客戶端, gateway-2進(jìn)程, worker-3進(jìn)程 返回時(shí)候 也是woker-3 返回到gate-way2 吧 不會(huì)換一個(gè)gateway 進(jìn)程吧