我有兩臺(tái)服務(wù)器A和B,都部署了webman,并且使用gateway worker提供ws服務(wù),A和B都有g(shù)ateway、register、gateway worker幾種進(jìn)程,register是相互注冊(cè)的?,F(xiàn)在我想在A中向B的ws用戶組發(fā)送消息。
我在A的http接口中使用了gateway client包,register address 填寫的是A的register地址:127.0.0.1:1236
,但是消息無(wú)法推送到B服務(wù)器的ws用戶
我看了源碼,按照我的理解,A的register 進(jìn)程里面應(yīng)該也是保存了B的gateway地址的,難道我gateway client的register address要寫兩個(gè)嗎:A:1236,B:1236
,但是看源碼這樣寫是沒(méi)有意義的,該怎么做呢?
registerAddress為 ['192.168.0.1:1236','192.168.0.2:1236']
這樣不行的,下面是他里面的方法,它只取了其中一個(gè)地址,我試過(guò)了:
foreach ($register_addresses as $register_address) {
set_error_handler(function(){});
$client = stream_socket_client('tcp://' . $register_address, $errno, $errmsg, static::$connectTimeout);
restore_error_handler();
if ($client) {
break;
}
}
if (!$client) {
throw new Exception('Can not connect to tcp://' . $register_address . ' ' . $errmsg);
}
如果A和B是一個(gè)集群,getewayClient調(diào)用是寫任何一個(gè)register地址即可。不是一個(gè)集群就要設(shè)置對(duì)應(yīng)的registerAddress
講道理可以互相通信,你看那張圖,但是你注冊(cè)中心不能寫127.0.0.1,要寫兩臺(tái)webman 其中一臺(tái)的內(nèi)網(wǎng)IP地址吧!
舉個(gè)例子,nginx 192.168.1.5, webman1 192.168.1.6:8002, webman2 192.168.1.7:8003;
這時(shí)候GatewayClient::$registerAddress = ["192.168.1.7:9005"],當(dāng)然GatewayWorker 網(wǎng)關(guān)服和邏輯服都要填寫這個(gè)注冊(cè)中心地址,不然無(wú)法通信。
這樣兩臺(tái)服務(wù)器都填寫這個(gè)IP就能相互通信,你127.0.0.1 肯定不行。
register 只有一個(gè)作用,登記邏輯服和網(wǎng)關(guān)服的ip:port,只要兩臺(tái)服務(wù)器的注冊(cè)中心一個(gè)地址,肯定是共享的。
只是你寫的127.0.0.1自然無(wú)法相互通信,相當(dāng)于各是各的注冊(cè)中心地址(也就是兩個(gè)注冊(cè)中心了)