1.gatewayworkerman 目前是分布式部署,部署2臺,作為通訊中訊服務,然后入口是一臺負載均衡服務器,會自動代理鏈接分發(fā)到2臺任意一臺。
程序邏輯大致如下:
onMessage(clientid,message)
{
(1)記錄message消息進入文件日志
logger(message); //產(chǎn)生問題,繼續(xù)往下看完
(2)判斷數(shù)據(jù)包類型
switch(type)
case login: //登陸
$_SESSION = $array_data;
$_SESSION = $array_data;
Gateway::bindUid($client_id,$_SESSION."-".$_SESSION);
case data: //數(shù)據(jù)轉(zhuǎn)發(fā)
$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秒一次,然后原包增加參數(shù)返回
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 ;
}
現(xiàn)在遇到的問題是:個別客戶端在正常接收心跳后某個時間點開始,就會接收不到心跳包,也就是日志上沒有記錄到logger(message),但是終端卻有正常收到服務端的心跳返回數(shù)據(jù),包括標記workerman1_proxy_server,實在很詭異,問題相互矛盾。不知道該如何下手去查原因,客戶端顯示心跳一直正常返回,而服務端卻記錄不到。
目測有可能是你 logger(message)函數(shù)的問題
logger(message)是增加在入口的,其他終端都正常記錄到,心跳格式也一樣,所以基本是排除這個函數(shù)的問題,現(xiàn)在我們在心跳返回的數(shù)據(jù)包加上時間戳取代之前的靜態(tài)標記,來排除是否服務端的問題,還是客戶端故障