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();
//
// // 通知對(duì)應(yīng)的websocket客戶端任務(wù)完成
//// $ws_connection->send('task complete');
// };
$taskConnection->connect();
3.
開啟N個(gè)task進(jìn)程,監(jiān)聽對(duì)應(yīng)的地址
task進(jìn)程中,在 onMessage
中處理任務(wù),處理完任務(wù)后,會(huì) close connection
疑問:
1.
webman,每接受到一個(gè)請(qǐng)求,在這個(gè)接口中,就new 一個(gè)AsyncTcpConnection,如果請(qǐng)求量非常大,會(huì)有什么隱患或者影響嗎?
2.
如果請(qǐng)求量很大,task進(jìn)程消費(fèi)不過來了,請(qǐng)求是不是會(huì)在task進(jìn)程中排隊(duì)
比如,開了5個(gè)task進(jìn)程,有10個(gè)請(qǐng)求進(jìn)來了,每個(gè)task處理請(qǐng)求需要5秒,第6個(gè)請(qǐng)求,是不是會(huì)在task進(jìn)程中排隊(duì)等候被處理?
3.
如果請(qǐng)求量很大,會(huì)不會(huì)造成任務(wù)丟失的情況?
比如,鏈接斷開了,當(dāng)前這個(gè)任務(wù)就不在了
4.
如何防止任務(wù)丟失的情況
如何做補(bǔ)償性的處理?
給一個(gè)思路也可以
目前在做使用這個(gè)異步任務(wù),擔(dān)心任務(wù)丟棄了,就找不到了