代码如下:
$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 回调里面的代码,只能自己打标记一步步的测试了,希望作者能回复一下,如果是我说的这样,应该在文档里面特意说明一下,这里有点反常啊,竟然不按代码顺序执行。
连接是先tcp三次握手,然后再websocket握手。
所以先执行onConnect,再执行onWebSocketConnect。如果你这种需要websocket握手后才能执行的业务逻辑应该放在onWebSocketConnect回调里,不应该放在onConnect回调里。
恩,懂了,感谢。
不要灌水啊兄弟,前面针对你的两个专帖回复里都表述的很清楚:
本来执行的顺序就是这样的、这和官方文档是否标注没有任何关系哈;你需要做的是好好理解下websocket协议的工作原理,至于想观测数据包的传输过程、那就tcpdump下、看的是清清楚楚。
好的,感谢。