客户链接服务器的时候,第一次可以正常连上weboskcet,但是连上一会儿后会返回invalid frame header,客户端进行重连也一直是返回这个是什么问题。
创建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'); //像发送消息的客户端回消息
};
$inner_text_worker->listen();
};
接收信息的代码
$worker->onMessage = function ($connection, $data){
global $worker;
// 判断当前客户端是否已经验证,既是否设置了uid
if(!isset($connection->uid))
{
// 没验证的话把第一个包当做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;
};
关闭连接代码
$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容器, 监听19999端口, 用于接收浏览器websocket请求
$worker = new Worker('websocket://0.0.0.0:19999');
没看到连接的端口19999啊。
那个报错信息是测试服务器上的。我本地没有出现过这个问题,但是放到测试服务器上的话就会出现这个问题。
看下测试服务器是不是启动了多个workerman,ps auxf