关于 onConnect 和 onWebsocketConnect 代码执行顺序,还请作者详细说一下,谢谢!

小七他哥

代码如下:

$worker->onConnect = function (\Workerman\Connection\TcpConnection $connection) {
    $connection_ip = $connection->getRemoteIp();

    $connection->onWebSocketConnect = function ($connection, $http_header) use ($connection_ip) {
        if (!isset($_GET['sid']) || !isSid($_GET['sid'])) {
            //第一次关闭链接
            $connection->close("\r\n");
            return false;
        }

        $connection->sid = $_GET['sid'];
    };
---------A---------------
    if (empty($connection->sid)) {
        //第二次关闭链接
        $connection->close("\r\n");
        return false;
    }
};

现在的问题是每个链接进来,都是在第二次关闭链接这个地方被关闭了链接,给我的感觉是代码会先执行A分割线下面的代码,然后再去执行 onWebSocketConnect 回调里面的代码,只能自己打标记一步步的测试了,希望作者能回复一下,如果是我说的这样,应该在文档里面特意说明一下,这里有点反常啊,竟然不按代码顺序执行。

1508 2 0
2个回答

jis

连接是先tcp三次握手,然后再websocket握手。
所以先执行onConnect,再执行onWebSocketConnect。如果你这种需要websocket握手后才能执行的业务逻辑应该放在onWebSocketConnect回调里,不应该放在onConnect回调里。

blogdaren

不要灌水啊兄弟,前面针对你的两个专帖回复里都表述的很清楚:
本来执行的顺序就是这样的、这和官方文档是否标注没有任何关系哈;你需要做的是好好理解下websocket协议的工作原理,至于想观测数据包的传输过程、那就tcpdump下、看的是清清楚楚。

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