gatwayworker分布式,服务端无法找到所有客户端,sendToAll不成功,只能发送给连接当前服务器的客户端???

发布于 2022-09-11 17:41:05 字数 2952 浏览 23 评论 0

两台服务器都有业务逻辑处理代码: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.

*

*/
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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

俯瞰星空 2022-09-18 17:41:05

$gateway->lanIp 内网地址不能写全0.register通过这个去找gateway的

gate1

$gateway = new Gateway("Websocket://0.0.0.0:8282");
// gateway名称,status方便查看
$gateway->name = 'gate2';
// gateway进程数
$gateway->count = 4;
// 本机ip,分布式部署时使用内网ip
$gateway->lanIp = '192.168.1.28';
// 内部通讯起始端口,假如$gateway->count=4,起始端口为4000
// 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口 
$gateway->startPort = 2900;
// 服务注册地址
$gateway->registerAddress = '192.168.1.59:1238';

gate2

$gateway = new Gateway("Websocket://0.0.0.0:8283");
// gateway名称,status方便查看
// gateway名称,status方便查看
$gateway->name = 'gate1';
// gateway进程数
$gateway->count = 4;
// 本机ip,分布式部署时使用内网ip
$gateway->lanIp = '192.168.1.59';
// 内部通讯起始端口,假如$gateway->count=4,起始端口为4000
// 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口 
$gateway->startPort = 2910;
// 服务注册地址
$gateway->registerAddress = '192.168.1.59:1238';
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文