webman version = 1.2.7
workerman version = 4.0.30
PHP version = 7.4.26
描述:
1.
其他應用調(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));
//如果需要結果
// $taskConnection->onMessage = function (AsyncTcpConnection $taskConnection, $task_result) {
// // 結果
// var_dump($task_result);
//
// // 獲得結果后記得關閉異步連接
// $taskConnection->close();
//
// // 通知對應的websocket客戶端任務完成
//// $ws_connection->send('task complete');
// };
$taskConnection->connect();
3.
開啟N個task進程,監(jiān)聽對應的地址
task進程中,在 onMessage
中處理任務,處理完任務后,會 close connection
疑問:
1.
webman,每接受到一個請求,在這個接口中,就new 一個AsyncTcpConnection,如果請求量非常大,會有什么隱患或者影響嗎?
2.
如果請求量很大,task進程消費不過來了,請求是不是會在task進程中排隊
比如,開了5個task進程,有10個請求進來了,每個task處理請求需要5秒,第6個請求,是不是會在task進程中排隊等候被處理?
3.
如果請求量很大,會不會造成任務丟失的情況?
比如,鏈接斷開了,當前這個任務就不在了
4.
如何防止任務丟失的情況
如何做補償性的處理?
給一個思路也可以
目前在做使用這個異步任務,擔心任務丟棄了,就找不到了
對健壯性要求高的異步任務建議使用正兒八經(jīng)的消息隊列