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