GatewayClient调用失败

0

web项目中直接进行下面调用


Gateway::isOnline("7f0000010b5600000006")


报错


图片

已邀请:

chaogel

赞同来自:

问题补充,在服务器A部署了GatewayWorker


在服务器B使用GatewayClient发送消息

aguai - 老丝

赞同来自:

在服务器A部署了GatewayWorker,那你在B调用为什么要 connect 127.0.0.1?

walkor

赞同来自:

贴下workerman的status
start_gateway.php代码
和GatewayClient调用的代码

chaogel

赞同来自:

调用就是按照手册写,就只有一行


Gateway::isOnline("7f0000010b5600000006")
图片


图片

walkor

赞同来自:

调用代码应该是这样


Gateway::$registerAddress = 'A服务器ip:1238';
Gateway::isOnline("7f0000010b5600000006");


另外把start_gateway.php中的lanip改成服务器A的ip(要在其它服务器上推送不能写127.0.0.1),如果服务器A B都在一个内网,ip就写成服务器A的内网ip,否则写外网ip

chaogel

赞同来自:

$gateway->name = 'YourAppGateway';
// gateway进程数
$gateway->count = 4;
// 本机ip,分布式部署时使用内网ip


$gateway->lanIp = '114.119.44.225';


// 内部通讯起始端口,假如$gateway->count=4,起始端口为4000
// 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口
$gateway->startPort = 2900;
// 服务注册地址
$gateway->registerAddress = '127.0.0.1:1238';


改成外网ip后启动
图片
报错

walkor

赞同来自:

应该lanip写错了,看看你服务器IP写的是不是你那个服务器的IP

walkor

赞同来自:

ip addr 里面根本没这个ip 114.119.44.225的网卡嘛
lanip尽量用内网ip,内网ip能用就用内网ip吧

sharf

赞同来自:

start_register.php start_gateway.php start_businessworker.php

里的ip都改为服务器的真实ip ,不要用127.0.0.1

chaogel

赞同来自:

    /**
* client_id到通讯地址的转换
* @return array
*/
public static function clientIdToAddress($client_id)
{
if(strlen($client_id) !== 20)
{
throw new \Exception("client_id $client_id is invalid");
}
$result = unpack('Nlocal_ip/nlocal_port/Nconnection_id' ,pack('H*', $client_id));
$result = ip2long("服务器外网ip");
// return unpack('Nlocal_ip/nlocal_port/Nconnection_id' ,pack('H*', $client_id));
return $result;
}

要回复问题请先登录注册