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

0

代码如下:


$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 回调里面的代码,因为没法用 xdebug,也只能自己打标记一步步的测试了,希望作者能回复一下,如果是我说的这样,应该在文档里面特意说明一下,这里有点反常啊,竟然不按代码顺序执行。

已邀请:

jis

赞同来自:

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

blogdaren - 专注C编程、PHP内核、LINUX、VIM【http://www.phpcreeper.com】

赞同来自:

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

要回复问题请先登录注册