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