利用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();
}
}
}
服务能够成功运行的,如下图
你gateway的 startPort 配置的啥?
那startPort没问题,username同学回复了解决方案,不过我感觉不科学啊,肯定是有地方在连 1236 端口,你先搜索下你整个项目代码树看是不是有 1236;另外 netstat 下1236端口啥情况。
CMD终端的乱码都调整下,便于你调试呢。
构造函数里面设置一下端口就不会爆这个错,这个只有windows会报错,linux上是正常的不会报错
在哪个文件里面的构造函数啊?
还有个问题就是windows里面运行gatewayworker是没有问题的,
[attach]1455[/attach]
但是在linux上是成功运行的,客户端就不能连接
[attach]1454[/attach]
是不是linux上少了
GameGateway websocket://0.0.0.0:30006 4
这个端口没有启动,代码是一样的,是Linux上的环境要另外设置吗?
1、GameGateway 肯定得启动呢,GameGateway默认会启动两类端口,一个是对外的面向客户端的监听端口,一类就是startPort所指的内网监听端口,这个businessworker 要与之通信连接。
2、只启动Register服务没啥意义,Register服务是用来给gateway 和businessworker 两类进程提供间接的通信服务的,一般启动完以后基本就不用关注了。
我记得手册说先要设置下Gateway::$rgisterAddress = 'xxxxx'; 才能调用 Gateway::sendToGroup啊
1、如果代码是直接在运行在workerman环境中,是不需设置$rgisterAddress,因为会通过businessworker长连接直接发送。
2、如果代码是运行在非workerman环境中,比如使用了gatewayclient,那么如你所说必须设置
Gateway::$rgisterAddress = '启动的register服务端口', 否则默认会连接默认的 1236端口来获取所有可用的gateway地址。
推测题主可能问题就在这里~~
能启动应该是对了 要不然会提示错误的 我这边没特殊配置什么东西