GatewayWorker群发消息 提示 " stream_socket_client(): unable to connect to tcp://127.0.0.1:1236"

jermine

利用tp5自带的thphp-queue redis扩展发送消息,在cmd运行命令后报错如下图,注意:Gateway::sendToClient是没有报错,能够成功发送消息,但是Gateway::sendToGroup就发送失败,报错了,如下图

图片
 

图片

还有的就是,sendToClient和sendToGroup在其他地方是没有问题的能够成功发送消息,而且也验证了发送组ID(roomId),数据类型也是一样的int类型,错误提示不能连接1236端口,但是我根部就没有开启过这个端口。
 
以下是Gregister注册代码:

class Gregister
{
    public function __construct(){

        // register 服务必须是text协议
        $register = new Register('text://0.0.0.0:1238');

        // 如果不是在根目录启动,则运行runAll方法
        if(!defined('GLOBAL_START'))
        {
            Worker::runAll();
        }
    }
}

服务能够成功运行的,如下图
图片
 

12112 5 0
5个回答

blogdaren

你gateway的 startPort 配置的啥?

  • jermine 2018-11-28
        $gateway->startPort = 2900;
        // 服务注册地址
        $gateway->registerAddress = '127.0.0.1:1238';
  • blogdaren 2018-11-28

    那startPort没问题,username同学回复了解决方案,不过我感觉不科学啊,肯定是有地方在连 1236 端口,你先搜索下你整个项目代码树看是不是有 1236;另外 netstat 下1236端口啥情况。

  • blogdaren 2018-11-28

    CMD终端的乱码都调整下,便于你调试呢。

username

构造函数里面设置一下端口就不会爆这个错,这个只有windows会报错,linux上是正常的不会报错

  • jermine 2018-11-28

    在哪个文件里面的构造函数啊?

jermine

还有个问题就是windows里面运行gatewayworker是没有问题的,

[attach]1455[/attach]
 
 
 
但是在linux上是成功运行的,客户端就不能连接

[attach]1454[/attach]
 
是不是linux上少了
GameGateway          websocket://0.0.0.0:30006           4        
这个端口没有启动,代码是一样的,是Linux上的环境要另外设置吗?

  • blogdaren 2018-11-28

    1、GameGateway 肯定得启动呢,GameGateway默认会启动两类端口,一个是对外的面向客户端的监听端口,一类就是startPort所指的内网监听端口,这个businessworker 要与之通信连接。
    2、只启动Register服务没啥意义,Register服务是用来给gateway 和businessworker 两类进程提供间接的通信服务的,一般启动完以后基本就不用关注了。

静默

我记得手册说先要设置下Gateway::$rgisterAddress = 'xxxxx'; 才能调用 Gateway::sendToGroup啊

  • blogdaren 2018-11-29

    1、如果代码是直接在运行在workerman环境中,是不需设置$rgisterAddress,因为会通过businessworker长连接直接发送。
    2、如果代码是运行在非workerman环境中,比如使用了gatewayclient,那么如你所说必须设置
    Gateway::$rgisterAddress = '启动的register服务端口', 否则默认会连接默认的 1236端口来获取所有可用的gateway地址。

    推测题主可能问题就在这里~~

username

能启动应该是对了 要不然会提示错误的 我这边没特殊配置什么东西 

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