我現在是用的是阿里云的云服務器,它給了我一個10.x.x.x的內網IP,我想使用的是一gateway多worker 分離部署(可能其它人也在阿里云使用workerman同一個局域網),那我如何才能使gateway把進來的業(yè)務需求分發(fā)到我的bussinessworker中去而不是別人的?都是同一個局域網,在gateway的那個機子上沒有地方配置寫的是我bussinessworker的ip。為什么它不會發(fā)到局域網別人的bussinessworker上去呢?
Gateway啟動時會將Gateway的內部通訊端口寫到 Config/Store.php配置的存儲中,
BusinessWorker服務器也有一個Config/Store.php配置,并且與Gateway的相同,
BusinessWorker啟動后會讀取Config/Store.php配置的存儲,得到Gateway的內部通訊地址
然后BusinessWorker主動連接到Gateway,Gateway與BusinessWorker之間的連接就建立起來了。
所以基于上面的原理,分布式部署時
1、要求Config/Store.php使用redis/memcache存儲,并且Gateway BusinessWorker服務器都可以訪問
2、Gateway BusinessWorker服務器的Config/Store.php配置要相同
同樣,基于上面原理,有多個GatwayWorker項目同時運行時,
要求多個GatwayWorker項目的Config/Store.php配置要求不同,否則數據會串
Gateway啟動時會將Gateway的內部通訊端口寫到 Config/Store.php配置的存儲中,
舉個例:如果gateway服務器所在ip為10.0.1.1,worker所在服務器所在ip為10.0.1.2/3,
Gateway啟動時會將Gateway的內部通訊端口寫到 10.0.1.1上的Config/Store.php配置的存儲里還是10.0.1.1/2/3的Config/Store.php中?
BusinessWorker啟動后會讀取Config/Store.php配置的存儲,得到Gateway的內部通訊地址
這個是不是這樣,10.0.1.2上的bussinessworker啟動后讀取store.php里的memcached地址是10.0.1.4,然后遍歷整個局域網,發(fā)現其上的store.php里的memcached為10.0.1.4就認為是同一個組的?
如果有多個gateway,bussinessworker是怎樣操作的?
store.php 中只有下面兩個配置:
public static $driver = self::DRIVER_MC;
// 如果是memcache存儲,則在這里設置memcache的ip端口,注意確保你安裝了memcache擴展
public static $gateway = array(
'127.0.0.1:11211',
);
class Store
{
// 使用文件存儲,注意使用文件存儲無法支持workerman分布式部署
const DRIVER_FILE = 1;
// 使用memcache存儲,支持workerman分布式部署
const DRIVER_MC = 2;
// 使用redis存儲(推薦),支持workerman分布式部署
const DRIVER_REDIS = 3;
// DRIVER_FILE 或者 DRIVER_MC 或者 DRIVER_REDIS(推薦)
public static $driver = self::DRIVER_FILE;
//$driver為DRIVER_MC/DRIVER_REDIS時需要配置memcached/redis服務端ip和端口
public static $gateway = array(
'127.0.0.1:6379',
);
// $driver為DRIVER_FILE時要配置此項,實際配置在最下面一行
public static $storePath = '';
}
// 默認系統(tǒng)臨時目錄下
Store::$storePath = sys_get_temp_dir().'/workerman-chat/';
如果沒有局域網遍歷,那bussinessworker如何知道向哪臺機子去取存儲中保存的通訊地址呢?
//$driver為DRIVER_MC/DRIVER_REDIS時需要配置memcached/redis服務端ip和端口
public static $gateway = array(
'127.0.0.1:6379',
);
這個不是寫的是memcached/redis服務端ip和端口嗎(上面注釋是這樣寫的)