gatwayworker分布式,服务端无法找到所有客户端,sendToAll不成功,只能发送给连接当前服务器的客户端???
两台服务器都有业务逻辑处理代码:Event.php,内容一样,但就是不能sendToALL向所有连向两台服务器的客户端,发送只能到各自的客户端
A服务器正常部署,
B服务器不写start_register.php,bussinessWorker服务和Gateway的注册地址指向A服务器,也就是由A服务器监控两台服务器的服务,
B服务器代码如下:
start_gateway.php
<?php
use WorkermanWorker;
use WorkermanWebServer;
use GatewayWorkerGateway;
use GatewayWorkerBusinessWorker;
use WorkermanAutoloader;
// gateway 进程,这里使用Text协议,可以用telnet测试
$gateway = new Gateway(_gateway_PORT_);
// gateway名称,status方便查看
$gateway->name = 'YourAppGateway';
// gateway进程数
$gateway->count = 3;
// 本机ip,分布式部署时使用内网ip
$gateway->lanIp = '0.0.0.0';
// 内部通讯起始端口,假如$gateway->count=4,起始端口为4000
// 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口
$gateway->startPort = _startPort_;
// 服务注册地址,指向A服务器
$gateway->registerAddress = _registerAddress_;
// 心跳间隔
$gateway->pingInterval = 15;//10 设置为0代表不发送心跳检测
$gateway->pingNotResponseLimit = 30;
// 心跳数据
$gateway->pingData = '{"action2":"ping"}';
/*
// 当客户端连接上来时,设置连接的onWebSocketConnect,即在websocket握手时的回调
$gateway->onConnect = function($connection)
{
$connection->onWebSocketConnect = function($connection , $http_header)
{
};
};
*/
// 如果不是在根目录启动,则运行runAll方法
if(!defined('GLOBAL_START')) {
Worker::runAll();
}
?>
start_businessworker_chat.php
<?php
/**
- This file is part of workerman.
*
- Licensed under The MIT License
- For full copyright and license information, please see the MIT-LICENSE.txt
- Redistributions of files must retain the above copyright notice.
*
- @author walkor<walkor@workerman.net>
- @copyright walkor<walkor@workerman.net>
- @link http://www.workerman.net/
- @license http://www.opensource.org/lic... MIT License
*/
use WorkermanWorker;
use WorkermanWebServer;
use GatewayWorkerGateway;
use GatewayWorkerBusinessWorker;
use WorkermanAutoloader;
use GlobalDataClient;
// bussinessWorker 进程
$worker = new BusinessWorker();
// worker名称
$worker->name = 'ChatBusinessWorker';
// bussinessWorker进程数量
//只能开启一个进程,不同进程间变量是不通的
$worker->count = 10;
// 设置业务超时时间10秒,需要配合业务
$worker->processTimeout = 10;
// 服务注册地址 指向A服务器
$worker->registerAddress = _registerAddress_;
$worker->onWorkerStart = function($worker)
{ //GlobalData服务器端与本项目是同一个,如果有多台聊天服务器要将它分离出去
global $globaldata;
$globaldata = new GlobalData\Client(_GlobalData_IP_.':'._GlobalData_PORT_);
};
// 如果不是在根目录启动,则运行runAll方法
if(!defined('GLOBAL_START')) {
Worker::runAll();
}
?>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
$gateway->lanIp
内网地址不能写全0.register通过这个去找gateway的gate1
gate2