客戶鏈接服務(wù)器的時候,第一次可以正常連上weboskcet,但是連上一會兒后會返回invalid frame header,客戶端進(jìn)行重連也一直是返回這個是什么問題。
創(chuàng)建webscoket代碼
$worker = new Worker('websocket://0.0.0.0:19999');
$worker->count = 1;
$worker->onWorkerStart = function ($worker){
$inner_text_worker =newWorker('text://0.0.0.0:10002');
$inner_text_worker->onMessage=function($connection,$buffer){
broadCast($buffer);
$connection->send('ok'); //像發(fā)送消息的客戶端回消息
};
$inner_text_worker->listen();
};
接收信息的代碼
$worker->onMessage = function ($connection, $data){
global $worker;
// 判斷當(dāng)前客戶端是否已經(jīng)驗證,既是否設(shè)置了uid
if(!isset($connection->uid))
{
// 沒驗證的話把第一個包當(dāng)做uid(這里為了方便演示,沒做真正的驗證)
$connection->uid = $data;
$url "http://127.0.0.1/admin_api/Member/setOnlie";
$dataList["id"] = $connection->uid;
$dataList["online_status"] = 1;
$list = send_post($url,$dataList);
$worker->uidConnections[$connection->uid] = $connection;
$connection->send($data);
return;
}
else if($data == "ping")
{
echo "ping的連接id: ".$connection->uid." 時間:".date("Y-m-d H:i:s")."\n";
sendMessageByUid($connection->uid,"ping");
}
return;
};
關(guān)閉連接代碼
$worker->onClose = function ($connection){
global $worker;
if(isset($connection->uid)){
$url "http://127.0.0.1/admin_api/Member/setOnlie";
$dataList["id"] = $connection->uid;
$dataList["online_status"] = 0;
$list = send_post($url,$dataList);
unset($worker->uidConnections[$connection->uid]);
}
};
// 初始化一個worker容器, 監(jiān)聽19999端口, 用于接收瀏覽器websocket請求
$worker = new Worker('websocket://0.0.0.0:19999');
$worker->count = 1;
// worker進(jìn)程啟動后創(chuàng)建一個text Worker以便打開一個內(nèi)部通訊端口
$worker->onWorkerStart = function ($worker){
// 開啟一個內(nèi)部端口,方便內(nèi)部系統(tǒng)推送數(shù)據(jù),Text協(xié)議格式 文本+換行符
$inner_text_worker = new Worker('text://0.0.0.0:10002');
$inner_text_worker->onMessage = function ($connection, $buffer){
broadCast($buffer);
$connection->send('ok'); //像發(fā)送消息的客戶端回消息
};
$inner_text_worker->listen();
};
這個是創(chuàng)建連接的代碼