gatewayworkerman 分布式部署后,个别终端通信异常

13950120292

1.gatewayworkerman 目前是分布式部署,部署2台,作为通讯中讯服务,然后入口是一台负载均衡服务器,会自动代理链接分发到2台任意一台。

程序逻辑大致如下:

onMessage(clientid,message)
{
         (1)记录message消息进入文件日志
           logger(message);     //产生问题,继续往下看完
         (2)判断数据包类型
           switch(type)
           case  login:   //登陆
                    $_SESSION = $array_data;
                    $_SESSION = $array_data;
                    Gateway::bindUid($client_id,$_SESSION."-".$_SESSION);
           case data:   //数据转发
                    $target_uid = $array_data."-".$array_data;
                    $target_client_id_array = Gateway::getClientIdByUid($target_uid);
                    $target_client_id = "";
                    var_dump($target_client_id_array);
                    if(!empty($target_client_id_array))
                    {
                        $array_data = "response";
                        $array_data = $client_id;
                        $json_string = jsonFormat($array_data);
                        Gateway::sendToUid($target_uid, $json_string."\n");
                    }

            case "heartbeat":  //处理心跳包,每30秒一次,然后原包增加参数返回

                if(!isset($array_data))$array_data=$array_data;
                if(!isset($array_data))$array_data=$array_data;
                $message_data=json_decode($message,true);
                $message_data="workerman1_proxy_server";  //标记,查原因使用
                Gateway::sendToClient($client_id,jsonFormat($message_data)."\n");
                break ;
}

现在遇到的问题是:个别客户端在正常接收心跳后某个时间点开始,就会接收不到心跳包,也就是日志上没有记录到logger(message),但是终端却有正常收到服务端的心跳返回数据,包括标记workerman1_proxy_server,实在很诡异,问题相互矛盾。不知道该如何下手去查原因,客户端显示心跳一直正常返回,而服务端却记录不到。

2229 1 0
1个回答

keytehu

目测有可能是你 logger(message)函数的问题

  • 13950120292 2017-01-07

    logger(message)是增加在入口的,其他终端都正常记录到,心跳格式也一样,所以基本是排除这个函数的问题,现在我们在心跳返回的数据包加上时间戳取代之前的静态标记,来排除是否服务端的问题,还是客户端故障

年代过于久远,无法发表回答
🔝