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

請教,關(guān)于 webman,使用異步任務(wù)的問題

evilk

webman version = 1.2.7
workerman version = 4.0.30
PHP version = 7.4.26

描述:
1.
其他應(yīng)用調(diào)用 webman 控制器接口,比如 /api/customer/register

2.
控制器接口中,類似于這樣

$taskConnection = new AsyncTcpConnection('Text://127.0.0.1:' . self::$taskPort);

        // 發(fā)送數(shù)據(jù)
        $taskConnection->send(json_encode($taskData));

        //如果需要結(jié)果
//        $taskConnection->onMessage = function (AsyncTcpConnection $taskConnection, $task_result) {
//            // 結(jié)果
//            var_dump($task_result);
//
//            // 獲得結(jié)果后記得關(guān)閉異步連接
//            $taskConnection->close();
//
//            // 通知對應(yīng)的websocket客戶端任務(wù)完成
////                $ws_connection->send('task complete');
//        };

        $taskConnection->connect();

3.
開啟N個task進(jìn)程,監(jiān)聽對應(yīng)的地址
task進(jìn)程中,在 onMessage中處理任務(wù),處理完任務(wù)后,會 close connection

疑問:
1.
webman,每接受到一個請求,在這個接口中,就new 一個AsyncTcpConnection,如果請求量非常大,會有什么隱患或者影響嗎?

2.
如果請求量很大,task進(jìn)程消費不過來了,請求是不是會在task進(jìn)程中排隊
比如,開了5個task進(jìn)程,有10個請求進(jìn)來了,每個task處理請求需要5秒,第6個請求,是不是會在task進(jìn)程中排隊等候被處理?

3.
如果請求量很大,會不會造成任務(wù)丟失的情況?
比如,鏈接斷開了,當(dāng)前這個任務(wù)就不在了

4.
如何防止任務(wù)丟失的情況
如何做補(bǔ)償性的處理?
給一個思路也可以
目前在做使用這個異步任務(wù),擔(dān)心任務(wù)丟棄了,就找不到了

2733 2 0
2個回答

nitron

對健壯性要求高的異步任務(wù)建議使用正兒八經(jīng)的消息隊列

  • evilk 2022-03-23

    好的,謝謝

  • nitron 2022-03-23

    再插一句,要RabbitMQ這種正兒八經(jīng)的

  • evilk 2022-03-23

    用RabbitMQ,會增加項目復(fù)雜度嗎,redis,項目本身用來做緩存的,所以想著直接用redis做隊列
    目前是這樣的
    通過task進(jìn)程執(zhí)行異步任務(wù),如果在task進(jìn)程處理異步任務(wù)時,失敗了,在catch中,又再push到隊列中,再消費處理一次
    不知道這樣的思路,是否可行

  • nitron 2022-03-23

    主要是redis無法確保3和4

walkor 打賞

1、如果服務(wù)器負(fù)載過高,或者ESTABLISHED連接消耗光本地端口,都可能會連接失敗。
2、會排隊
3、連接斷開可能會導(dǎo)致數(shù)據(jù)丟失
4、直接用消息隊列

  • 暫無評論
年代過于久遠(yuǎn),無法發(fā)表回答
??