因?yàn)槎鄠€worker是競爭消費(fèi)的,沒有辦法保證一一對應(yīng)。我看現(xiàn)在的解決方案只有使用channel注冊訂閱的方式,還有其它方案可以解決嗎
對于純workerman環(huán)境:
一個socket連接一旦連接到哪個worker進(jìn)程,那么后續(xù)這個連接上的消息依然還是由相應(yīng)的這個worker進(jìn)程來處理的;【worker節(jié)點(diǎn)依賴內(nèi)核調(diào)度實(shí)現(xiàn)】
再比如gatewayworker環(huán)境:
也有類似的實(shí)現(xiàn)機(jī)制,gateway轉(zhuǎn)發(fā)連接連接到businessworker時,一開始隨機(jī)路由選擇一個worker進(jìn)程,在此之后同一連接繼續(xù)轉(zhuǎn)發(fā)來的消息就會自動交由給先前路由好的那個進(jìn)程?!緒orker節(jié)點(diǎn)依賴內(nèi)核調(diào)度實(shí)現(xiàn),轉(zhuǎn)發(fā)節(jié)點(diǎn)之間則依賴應(yīng)用實(shí)現(xiàn)】
對于純workerman環(huán)境:有沒有內(nèi)核版本限制呢,我看3.9以上使用了端口復(fù)用SO_REUSEPORT可以實(shí)現(xiàn)同一個連接一直由同一個worker處理(內(nèi)核根據(jù)tcp四元組hash負(fù)載均衡)。
進(jìn)程的負(fù)載均衡是需要開啟端口復(fù)用機(jī)制、workerman已經(jīng)支持、另linux內(nèi)核好像是需要2.6以上即可。