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ù)丟棄了,就找不到了
對健壯性要求高的異步任務(wù)建議使用正兒八經(jīng)的消息隊列