工作原理
1、Register、Gateway、BusinessWorker進(jìn)程啟動
2、Gateway、BusinessWorker進(jìn)程啟動后向Register服務(wù)進(jìn)程發(fā)起長連接注冊自己
3、Register服務(wù)收到Gateway的注冊后,把所有Gateway的通訊地址保存在內(nèi)存中
4、Register服務(wù)收到BusinessWorker的注冊后,把內(nèi)存中所有的Gateway的通訊地址發(fā)給BusinessWorker
5、BusinessWorker進(jìn)程得到所有的Gateway內(nèi)部通訊地址后嘗試連接Gateway
6、如果運(yùn)行過程中有新的Gateway服務(wù)注冊到Register(一般是分布式部署加機(jī)器),則將新的Gateway內(nèi)部通訊地址列表將廣播給所有BusinessWorker,BusinessWorker收到后建立連接
7、如果有Gateway下線,則Register服務(wù)會收到通知,會將對應(yīng)的內(nèi)部通訊地址刪除,然后廣播新的內(nèi)部通訊地址列表給所有BusinessWorker,BusinessWorker不再連接下線的Gateway
8、至此Gateway與BusinessWorker通過Register已經(jīng)建立起長連接
9、客戶端的事件及數(shù)據(jù)全部由Gateway轉(zhuǎn)發(fā)給BusinessWorker處理,BusinessWorker默認(rèn)調(diào)用Events.php中的onConnect onMessage onClose處理業(yè)務(wù)邏輯。
10、BusinessWorker的業(yè)務(wù)邏輯入口全部在Events.php中,包括onWorkerStart進(jìn)程啟動事件(進(jìn)程事件)、onConnect連接事件(客戶端事件)、onMessage消息事件(客戶端事件)、onClose連接關(guān)閉事件(客戶端事件)、onWorkerStop進(jìn)程退出事件(進(jìn)程事件)
適用范圍
Gateway/Worker 的進(jìn)程模型
特點(diǎn):
從圖上我們可以看出Gateway負(fù)責(zé)接收客戶端的連接以及連接上的數(shù)據(jù),然后Worker接收Gateway發(fā)來的數(shù)據(jù)做處理,然后再經(jīng)由Gateway把結(jié)果轉(zhuǎn)發(fā)給其它客戶端。每個客戶端都有很多的路由到達(dá)另外一個客戶端,例如client⑦與client①可以經(jīng)由藍(lán)色路徑完成數(shù)據(jù)通訊
優(yōu)點(diǎn):
1、可以方便的實現(xiàn)客戶端之間的通訊
2、Gateway與Worker之間是基于socket長連接通訊,也就是說Gateway、Worker可以部署在不同的服務(wù)器上,非常容易實現(xiàn)分布式部署,擴(kuò)容服務(wù)器
3、Gateway進(jìn)程只負(fù)責(zé)網(wǎng)絡(luò)IO,業(yè)務(wù)實現(xiàn)都在Worker進(jìn)程上,可以reload Worker進(jìn)程,實現(xiàn)在不影響用戶的情況下完成代碼熱更新。
適用范圍:
適用于客戶端與客戶端需要實時通訊的項目。