WebSocket connection to ' ws://0.0.0.0:19999/' failed: Invalid frame header

sky123

客户链接服务器的时候,第一次可以正常连上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]);
    }
};
8399 2 0
2个回答

sky123

// 初始化一个worker容器, 监听19999端口, 用于接收浏览器websocket请求
$worker = new Worker('websocket://0.0.0.0:19999');

$worker->count = 1;
// worker进程启动后创建一个text Worker以便打开一个内部通讯端口
$worker->onWorkerStart = function ($worker){
    // 开启一个内部端口,方便内部系统推送数据,Text协议格式 文本+换行符
    $inner_text_worker = new Worker('text://0.0.0.0:10002');
    $inner_text_worker->onMessage = function ($connection, $buffer){
        broadCast($buffer);
        $connection->send('ok');        //像发送消息的客户端回消息
    };
    $inner_text_worker->listen();
};

这个是创建连接的代码
  • 暂无评论
six
WebSocket connection to ' ws:// xxxx. com/' failed: Invalid frame header

没看到连接的端口19999啊。

  • sky123 2020-04-08

    那个报错信息是测试服务器上的。我本地没有出现过这个问题,但是放到测试服务器上的话就会出现这个问题。

  • six 2020-04-09

    看下测试服务器是不是启动了多个workerman,ps auxf

年代过于久远,无法发表回答
🔝