使用的WorkerMan中phpsocket-io,總出現(xiàn)收不到數(shù)據(jù)問題
// 全局?jǐn)?shù)組保存uid在線數(shù)據(jù)
$uidConnectionMap_CRT_pc = array();
// PHPSocketIO服務(wù)
$sender_io_CRT_pc = new SocketIO(22120,$context);
// 客戶端發(fā)起連接事件時(shí),設(shè)置連接socket的各種事件回調(diào)
$sender_io_CRT_pc->on('connection', function($socket)use($sender_io_CRT_pc)
{
//echo "new connection coming\n";
// 當(dāng)客戶端發(fā)來登錄事件時(shí)觸發(fā)
$socket->on('login', function ($uid)use($socket)
{
global $uidConnectionMap_CRT_pc;
// 已經(jīng)登錄過了
if(isset($socket->uid))
{
return;
}
// 更新對(duì)應(yīng)uid的在線數(shù)據(jù)
$uid = (string)$uid;
if(!isset($uidConnectionMap_CRT_pc[$uid]))
{
$uidConnectionMap_CRT_pc[$uid] = 0;
}
// 這個(gè)uid有++$uidConnectionMap_CRT_pc[$uid]個(gè)socket連接
++$uidConnectionMap_CRT_pc[$uid];
// 將這個(gè)連接加入到uid分組,方便針對(duì)uid推送數(shù)據(jù)
$socket->join($uid);
$socket->uid = $uid;
});
// 當(dāng)客戶端斷開連接是觸發(fā)(一般是關(guān)閉網(wǎng)頁或者跳轉(zhuǎn)刷新導(dǎo)致)
$socket->on('disconnect', function () use($socket)
{
if(!isset($socket->uid))
{
return;
}
global $uidConnectionMap_CRT_pc, $sender_io_CRT_pc;
// 將uid的在線socket數(shù)減一
if(--$uidConnectionMap_CRT_pc[$socket->uid] <= 0)
{
unset($uidConnectionMap_CRT_pc[$socket->uid]);
}
});
});
// 當(dāng)$sender_io_CRT_pc啟動(dòng)后監(jiān)聽一個(gè)http端口,通過這個(gè)端口可以給任意uid或者所有uid推送數(shù)據(jù)
$sender_io_CRT_pc->on('workerStart', function()
{
// 監(jiān)聽一個(gè)http端口
$inner_http_worker_CRT = new Worker('http://172.16.137.103:22121');
// 當(dāng)http客戶端發(fā)來數(shù)據(jù)時(shí)觸發(fā)
$inner_http_worker_CRT->onMessage = function(TcpConnection $inner_http_worker_CRT_pc_pc, Request $request)
{
global $uidConnectionMap_CRT_pc;
$post = $request->post();
$post = $post ? $post : $request->get();
// 推送數(shù)據(jù)的url格式 type=publish&to=uid&content=xxxx
switch(@$post['type'])
{
case 'fire'://設(shè)備報(bào)警用
global $sender_io_CRT_pc;
$to = @$post['to'];
// 有指定uid則向uid所在socket組發(fā)送數(shù)據(jù)
if($to)
{
$sender_io_CRT_pc->to($to)->emit('new_msg', $post['content']);
}
else
{//否則向所有uid推送數(shù)據(jù)
$sender_io_CRT_pc->emit('new_msg', @$post['content']);
}
break;
case 'video'://視頻彈窗用
global $sender_io_CRT_pc;
$to = @$post['to'];
// 有指定uid則向uid所在socket組發(fā)送數(shù)據(jù)
if($to)
{
$sender_io_CRT_pc->to($to)->emit('video_msg', $post['content']);
}
else
{//否則向所有uid推送數(shù)據(jù)
$sender_io_CRT_pc->emit('video_msg', @$post['content']);
}
break;
case 'device'://設(shè)備在線離線狀態(tài)
global $sender_io_CRT_pc;
$to = @$post['to'];
$sender_io_CRT_pc->to($to)->emit('device', $post['content']);
break;
case 'mail'://站內(nèi)信
global $sender_io_CRT_pc;
$to = @$post['to'];
$sender_io_CRT_pc->to($to)->emit('mail', @$post['content']);
break;
case "videoPay"://攝像頭充值結(jié)果推送
global $sender_io_CRT_pc;
$to = @$post['to'];
$sender_io_CRT_pc->to($to)->emit('videoPay', @$post['content']);
break;
case "wechat"://充值結(jié)果推送
global $sender_io_CRT_pc;
$to = @$post['to'];
$sender_io_CRT_pc->to($to)->emit('wechat', @$post['content']);
break;
case "firereview"://消警復(fù)核數(shù)量推送
global $sender_io_CRT_pc;
$to = @$post['to'];
$sender_io_CRT_pc->to($to)->emit('firereview', @$post['content']);
break;
case "wechatLogin"://微信掃碼登錄結(jié)果
global $sender_io_CRT_pc;
$to = @$post['to'];
$sender_io_CRT_pc->to($to)->emit('wechatLogin', @$post['content']);
break;
case "sendtoMaster"://處理報(bào)警推送消息給總管理
global $sender_io_CRT_pc;
$to = @$post['to'];
$sender_io_CRT_pc->to($to)->emit('sendtoMaster', @$post['content']);
break;
case "companystatus"://強(qiáng)制全部員工下線并禁止登錄
global $sender_io_CRT_pc;
$to = @$post['to'];
$sender_io_CRT_pc->to($to)->emit('companystatus', @$post['content']);
break;
case "sim"://SIM到期提醒
global $sender_io_CRT_pc;
$to = @$post['to'];
$sender_io_CRT_pc->to($to)->emit('sim', @$post['content']);
break;
case "sim_warning"://SIM流量預(yù)警提醒
global $sender_io_CRT_pc;
$to = @$post['to'];
$sender_io_CRT_pc->to($to)->emit('sim_warning', @$post['content']);
break;
case "host920"://920推送子設(shè)備狀態(tài)
global $sender_io_CRT_pc;
$to = @$post['to'];
$sender_io_CRT_pc->to($to)->emit('host920', @$post['content']);
break;
case "host920More"://920推送總線盤
global $sender_io_CRT_pc;
$to = @$post['to'];
$sender_io_CRT_pc->to($to)->emit('host920More', @$post['content']);
break;
case "control602"://602推送設(shè)備狀態(tài)
global $sender_io_CRT_pc;
$to = @$post['to'];
$sender_io_CRT_pc->to($to)->emit('control602', @$post['content']);
break;
case "control656"://656推送設(shè)備狀態(tài)
global $sender_io_CRT_pc;
$to = @$post['to'];
$sender_io_CRT_pc->to($to)->emit('control656', @$post['content']);
break;
}
return $inner_http_worker_CRT_pc_pc->send('fail');
};
// 執(zhí)行監(jiān)聽
$inner_http_worker_CRT->listen();
});
收不到推送數(shù)據(jù)的時(shí)候,socket一直顯示待處理
Centos7,Workerman版本4.0.4
請(qǐng)問這個(gè)問題是出在哪里?