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

多臺gateway之間的通訊原理是什么?

2710046

我想通過LVS負(fù)載均衡實(shí)現(xiàn)多臺gateway來滿足高并發(fā),如果LVS把用戶A連接到了gateway1,用戶B連接到了gateway2,兩個(gè)用戶不在一個(gè)gateway下面,這兩個(gè)用戶如何互相發(fā)送數(shù)據(jù)?實(shí)現(xiàn)原理是什么呢?盼回復(fù)。

11051 1 1
1個(gè)回答

walkor 打賞

workerman啟動過程:
workermangateway/worker模型中有兩種進(jìn)程,gateway進(jìn)程(負(fù)責(zé)異步網(wǎng)絡(luò)IO)和worker進(jìn)程(負(fù)責(zé)業(yè)務(wù)邏輯)。wokerman啟動時(shí)會啟動gateway進(jìn)程和worker進(jìn)程,gateway進(jìn)程啟動時(shí)會向一個(gè)存儲(文件或者memcache,可配置)寫入每個(gè)gateway進(jìn)程的內(nèi)部通訊地址,worker進(jìn)程啟動時(shí)會讀取存儲,并向每個(gè)geteway內(nèi)部通訊地址建立起長連接。同時(shí)worker進(jìn)程中會有個(gè)定時(shí)任務(wù),定時(shí)監(jiān)測存儲中是否有新的gateway內(nèi)部通訊地址加入,有的話同樣建立長連接(這樣增加workerman服務(wù)器就會自動探測到,新的gateway、worker進(jìn)程就會加入集群)。gateway和worker之間的通訊就是靠內(nèi)部的長連接通訊的,每個(gè)gateway進(jìn)程會和后端所有worker進(jìn)程有一個(gè)長連接,每個(gè)gateway進(jìn)程都知道有多少worker進(jìn)程,每個(gè)worker進(jìn)程也知道有哪些gateway進(jìn)程。

廣播和單獨(dú)發(fā)送
發(fā)送數(shù)據(jù)分為兩種,一種是廣播(給所有在線客戶端發(fā)),另外一種是單獨(dú)給某客戶端發(fā)送。

廣播:
廣播比較好實(shí)現(xiàn),當(dāng)某個(gè)客戶端要廣播數(shù)據(jù)時(shí),worker進(jìn)程中調(diào)用Gateway::sendToAll($message)即可。這時(shí)worker進(jìn)程會向所有g(shù)ateway進(jìn)程通過已經(jīng)建立的長連接發(fā)送一條廣播命令+數(shù)據(jù),每個(gè)gateway進(jìn)程都會收到這個(gè)命令+數(shù)據(jù),向gateway進(jìn)程自己所維護(hù)的所有客戶端連接發(fā)送數(shù)據(jù)(異步)。

單獨(dú)發(fā)送:
單獨(dú)發(fā)送調(diào)用Gateway::sendToClient($client_id, $message);。也就是說單獨(dú)發(fā)送需要得到對方的client_id。workerman發(fā)送向client_id發(fā)送數(shù)據(jù)時(shí),需要通過client_id獲得到client_id對應(yīng)的gateway內(nèi)部通信地址,而這個(gè)地址是在每個(gè)客戶端連接gateway時(shí)就存儲了的(文件或者memcache,可配置),通過這個(gè)存儲得知gateway內(nèi)部通訊地址后,向這個(gè)地址發(fā)送命令+數(shù)據(jù),對應(yīng)gateway進(jìn)程收到命令+數(shù)據(jù)后找到對應(yīng)的客戶端socket發(fā)送數(shù)據(jù)即可。

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