多個(gè)GATEWAY進(jìn)程的客戶端的連接信息在哪維護(hù),如何廣播所有GATEWAY進(jìn)程上連接的客戶端
每個(gè)Gateway進(jìn)程會(huì)維護(hù)自己的客戶端鏈接,并且都會(huì)有自己的內(nèi)部通訊內(nèi)網(wǎng)ip及端口(各個(gè)Gateway進(jìn)程內(nèi)部通訊ip端口都不一樣,使得BussnessWorker可以識(shí)別特定的Gateway進(jìn)程并與之通訊),workerman會(huì)將所有Gateway進(jìn)程的內(nèi)部通訊的ip端口記錄在一個(gè)存儲(chǔ)里面(可能是文件或者memcache,取決與Config/Store::$driver,注意采用文件存儲(chǔ)時(shí)無法使用分布式),BussnessWorker進(jìn)程啟動(dòng)的時(shí)候會(huì)讀取存儲(chǔ)中與Gateway通訊的ip端口并與之建立TCP長鏈接,并保存這些鏈接在數(shù)組中。當(dāng)BussnessWorker要向所有客戶端鏈接廣播數(shù)據(jù)時(shí),只需要向這些長鏈接各發(fā)送一個(gè)cmd為CMD_SEND_TO_ALL的數(shù)據(jù)包即可,每個(gè)Gateway進(jìn)程收到數(shù)據(jù)包發(fā)現(xiàn)是CMD_SEND_TO_ALL后便向自己維護(hù)的客戶端鏈接發(fā)送需要廣播的數(shù)據(jù)即可。這樣每個(gè)鏈接到Gateway上的客戶端都會(huì)收到廣播的數(shù)據(jù)了。