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,实在很诡异,问题相互矛盾。不知道该如何下手去查原因,客户端显示心跳一直正常返回,而服务端却记录不到。
目测有可能是你 logger(message)函数的问题
logger(message)是增加在入口的,其他终端都正常记录到,心跳格式也一样,所以基本是排除这个函数的问题,现在我们在心跳返回的数据包加上时间戳取代之前的静态标记,来排除是否服务端的问题,还是客户端故障