registerAddress bug?

killhook

我发誓我所有的服务已经注册到与start_register文件相同的ip及端口了
$register = new Register('text://0.0.0.0:1238');

但为毛要报 'Can not connect to tcp://127.0.0.1:1236这个错?

start_businessworker.php 的 $gateway->registerAddress = '127.0.0.1:1238';
start_gateway.php 的 $worker->registerAddress = '127.0.0.1:1238';

难道这两句都不起作用的吗?

3508 5 0
5个回答

killhook

使用sendToAll会触发此问题

  • 暂无评论
walkor

在哪里调用的sendToAll?Gateway进程里?

  • 暂无评论
killhook

在Applications\YourApp\start_timer.php 里写了一个定时任务,定时调用该文件同目录下的一个文件里的函数。在这个函数里执行了sendToAll

  • 暂无评论
killhook
// $repeat = new Worker();
// $repeat->count = 1;
// $repeat->name = 'Timer_repeat';
// $repeat->onWorkerStart = function($repeat)
// {
//     Timer::add(10,function()
//     {
//         TestEvent::repeat();
//     });
// };
  • 暂无评论
walkor

这个是正常的,不是bug。

一个GatewayWorker项目只有一个Register服务,GatewayWorker项目中Gateway和businessWorker都用registerAddress属性来指定当前Gateway和businessWorker链接哪个Register服务,从而表明Gateway和businessWorker属于哪个项目。

start_timer.php 使用的是Worker容器,因为Worker既不是Gateway进程也不是BusinessWorker进程,它不属于GatewayWorker项目,Worker是Gateway BusinessWorker的基类,Worker本身也没有类似registerAddress属性指定Register服务,所以无法确定start_timer.php属于哪个项目。理论上start_timer.php 里的定时器可以向任意GatewayWorker项目推送数据。Gatway::sendXXX 接口默认使用的是127.0.0.1:1236端口作为RegisterAddress,但实际上端口为1238,所以会有上面的报错。
解决方法是在start_timer.php的onWorkerStart中第一行调用
GatewayWorker\Lib\Gateway::$registerAddress = '127.0.0.1:1238';
来明确指定推送接口链接哪个GatewayWorker推送数据。

  • 暂无评论
年代过于久远,无法发表回答
🔝