国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

workerman gateway close() 關(guān)閉

bot

問題描述

在gateway onWebSocketConnect() 中啟動了一個AsyncTcpConnection 異步長連接。然后將對象保存到變量中。
類似下邊這種
self::$aliWsArr[$client_id] = new AsyncTcpConnection('ws://dashscope.aliyuncs.com/api-ws/v1/inference');

然后gateway 客戶端關(guān)閉連接的時候。通過self::$aliWsArr[$client_id] 關(guān)閉 AsyncTcpConnection 不生效。
public static function onClose($client_id)
{
echo "client_id closed: " . $client_id;
$key0 = self::$getTaskIdByClientId . $client_id;
$taskId = Redis::get($key0);
//結(jié)束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);
}

175 1 0
1個回答

walkor 打賞

這種問題要自己記錄詳細(xì)日志排查

  • bot 2025-04-28

    每個ws 里邊的時間都記錄的有日志。 下邊代碼在gateway onWebSocketConnect 中

        self::$aliWsArr[$client_id]->onConnect = function ($ws) use ($client_id) {
            self::$canSendAudio[$client_id] = false;  // 初始化
            echo "connected success:aliws:" . $ws->id . ",client_id:" . $client_id . "\n";
            //開啟任務(wù)
            $taskId = uniqid();
            $key    = self::$getTaskIdByClientId . $client_id;
            Redis::setEx($key, 3600, $taskId);
            $ws->send(json_encode(self::sendRunTaskData($taskId)));
    
            //給asr 發(fā)送消息
            self::$sendAsrTimerIds[$client_id] = Timer::add(
                0.05,
                function () use ($client_id) {
                    if (!isset(self::$canSendAudio[$client_id])) {
                        return true;
                    }
                    $channel = self::$sendAliyunChan;
                    $data    = $channel->pop();
                    if ($data) {
                        self::handleAliyunEventMessage($data, $client_id);
                    }
                },
            );
        };
        // 當(dāng)收到消息時
        self::$aliWsArr[$client_id]->onMessage = function ($ws, $msg) use ($client_id) {
            var_dump("ali 返回消息", $msg);
            $data = json_decode($msg, true);
            self::handleDashScopeMessage($data, $client_id);
        };
        self::$aliWsArr[$client_id]->onClose   = function ($ws) use ($client_id) {
            echo "ars close:" . $ws->id . ",client_id:" . $client_id . "\n";
            //關(guān)閉阿里云和瀏覽器映射
            unset(self::$aliWsArr[$client_id]);
            //關(guān)閉開始音頻處理
            unset(self::$canSendAudio[$client_id]);
            //刪除給asr發(fā)送消息的定時器
            if (isset(self::$sendAsrTimerIds[$client_id])) {
                Timer::del(self::$sendAsrTimerIds[$client_id]);
                unset(self::$sendAsrTimerIds[$client_id]);
            }
        };
        self::$aliWsArr[$client_id]->onError   = function ($ws, $code, $msg) {
            echo "Error code:$code msg:$msg\n";
        };
        self::$aliWsArr[$client_id]->connect();
??