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