GatewayClient调用失败

chaogel

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

Gateway::isOnline("7f0000010b5600000006")

报错

[attach]193[/attach]

8433 11 0
11个回答

chaogel

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

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

  • 暂无评论
aguai

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

  • chaogel 2015-12-17

    直接用的GatewayClient,地址是他内部解析出来的

  • chaogel 2015-12-17

    我也比较纳闷,不晓得是不是哪里配置的问题,但是我是按照手册上面配置的啊

walkor

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

  • chaogel 2015-12-17

    见下面回复

  • chaogel 2015-12-17

    GatewayWorker服务器和客户端是可以正常通信的

  • chaogel 2015-12-17

    注册服务器地址是直接改在引入的Gateway.php里面的

chaogel

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

Gateway::isOnline("7f0000010b5600000006")
[attach]194[/attach]

[attach]195[/attach]

  • 暂无评论
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后启动
[attach]197[/attach]
报错

  • 暂无评论
walkor

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

  • chaogel 2015-12-17

    没有错,写内网ip就可以,写外网ip就启动不了

  • walkor 2015-12-17

    出错的服务器运行命名
    ip addr
    贴下

  • chaogel 2015-12-17

    @1:见下面回复

chaogel

[attach]198[/attach]

  • 暂无评论
walkor

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

  • chaogel 2015-12-17

    什么意思,不懂,我的域名也是绑定的这个ip,ssh也是连接的这个ip啊

  • chaogel 2015-12-17

    主要是两个服务器不在同一个子网内

  • walkor 2015-12-17

    ipaddr 上看ip地址114.119.44.225不属于这台服务器,所以workerman监听不了这个ip。可以找技术人员看下为什么这样,有可能114.119.44.225只是个代理服务器

  • chaogel 2015-12-17

    解决了,监听还是内网的地址,GatewayClient调用时clientIdToAddress,转换的ip改成服务器外网ip就行了,十分感谢!

  • walkor 2015-12-17

    聪明

  • weisswm 2017-01-27

    @713:clientIdToAddress 转换后的结果Array ( [local_ip] => 2130706433 [local_port] => 2900 [connection_id] => 1 ),怎么改成你说的 转换的ip改成服务器外网ip??

  • linjiangl 2018-04-09

    同问楼上问题

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;
    }
  • 暂无评论
年代过于久远,无法发表回答
🔝