上一篇文章
webman Gateway 阿里云负载均衡 后端机器一台能发消息 一台不能
这里有负载均衡配置说明 但是是基于workman的,没有提及到webman如何设置
https://www.workerman.net/doc/gateway-worker/how-distributed.html
1. 打开文件配置文件
config/plugin/webman/gateway-worker/process.php
2. 假设我们有负载均衡2台 a机器内网ip是 192.168.0.1 b机器内网ip是192.168.0.2
a机器配置方法
特别注意:
<?php
use Webman\GatewayWorker\Gateway;
use Webman\GatewayWorker\BusinessWorker;
use Webman\GatewayWorker\Register;
return [
'gateway' => [
'handler' => Gateway::class,
'listen' => 'websocket://0.0.0.0:7272',
'count' => 2,
'reloadable' => false,
'constructor' => ['config' => [
'lanIp' => '192.168.0.1',
'startPort' => 2300,
'pingInterval' => 25,
'pingData' => '{"type":"ping"}',
'registerAddress'=>['192.168.0.1:1236','192.168.0.2:1236'],
'onConnect' => function(){},
]]
],
'worker' => [
'handler' => BusinessWorker::class,
'count' => cpu_count()*2,
'constructor' => ['config' => [
'eventHandler' => plugin\webman\gateway\Events::class,
'name' => 'ChatBusinessWorker',
'registerAddress' => ['192.168.0.1:1236','192.168.0.2:1236'],
]]
],
'register' => [
'handler' => Register::class,
'listen' => 'text://192.168.0.1:1236',
'count' => 1, // Must be 1
'reloadable' => false,
'constructor' => []
],
];
那么 b机器的配置
<?php
use Webman\GatewayWorker\Gateway;
use Webman\GatewayWorker\BusinessWorker;
use Webman\GatewayWorker\Register;
return [
'gateway' => [
'handler' => Gateway::class,
'listen' => 'websocket://0.0.0.0:7272',
'count' => 2,
'reloadable' => false,
'constructor' => ['config' => [
'lanIp' => '192.168.0.2',
'startPort' => 2300,
'pingInterval' => 25,
'pingData' => '{"type":"ping"}',
'registerAddress'=>['192.168.0.1:1236','192.168.0.2:1236'],
'onConnect' => function(){},
]]
],
'worker' => [
'handler' => BusinessWorker::class,
'count' => cpu_count()*2,
'constructor' => ['config' => [
'eventHandler' => plugin\webman\gateway\Events::class,
'name' => 'ChatBusinessWorker',
'registerAddress' => ['192.168.0.1:1236','192.168.0.2:1236'],
]]
],
'register' => [
'handler' => Register::class,
'listen' => 'text://192.168.0.2:1236',
'count' => 1, // Must be 1
'reloadable' => false,
'constructor' => []
],
];
在a机器投递消息的时候
Gateway::$registerAddress = '192.168.0.1:1236';
Gateway::sendToUid($uid, '我是a机器发送的消息');
在b机器投递消息的时候
Gateway::$registerAddress = '192.168.0.2:1236';
Gateway::sendToUid($uid, '我是b机器发送的消息');
至此结束,亲测有效
需要搞清楚
分布式部署
和集群部署
的区别。官方文档 同一集群使用相同的一组Register服务
前置做了一致性hash的 负载均衡