在gateway onWebSocketConnect() 中启动了一个AsyncTcpConnection 异步长连接。然后将对象保存到变量中。
类似下边这种
self::$aliWsArr[$client_id] = new AsyncTcpConnection('ws://dashscope.aliyuncs.com/api-ws/v1/inference');
然后gateway 客户端关闭连接的时候。通过self::$aliWsArr[$client_id] 关闭 AsyncTcpConnection 不生效。
public static function onClose($client_id)
{
echo "client_id closed: " . $client_id;
$key0 = self::$getTaskIdByClientId . $client_id;
$taskId = Redis::get($key0);
//结束task
if (isset(self::$aliWsArr[$client_id]) && $taskId) {
self::finishTaskMessage(self::$aliWsArr[$client_id], $taskId);
self::stopHeartbeat(self::$aliWsArr[$client_id]);
}
//删除client 和 taskId 映射
Redis::del($key0);
}
这种问题要自己记录详细日志排查
每个ws 里边的时间都记录的有日志。 下边代码在gateway onWebSocketConnect 中