在webman中,處理任務(wù),分兩種情況
1.不需要得到任務(wù)結(jié)果的
這種情況,可以用隊(duì)列去處理,客戶端執(zhí)行扔進(jìn)隊(duì)列
操作后,會(huì)立即返回,不會(huì)阻塞業(yè)務(wù)進(jìn)程
2.需要得到任務(wù)結(jié)果的
這種情況,參考自定義進(jìn)程處理,如果任務(wù)耗時(shí)較長(zhǎng),此時(shí)會(huì)阻塞業(yè)務(wù)進(jìn)程
參考過 在workerman中異步任務(wù),但文檔中,是在workerman中調(diào)用的(worker/onMessage中使用)
嘗試在webman/controller/action中
public function task()
{
// 與遠(yuǎn)程task服務(wù)建立異步連接,ip為遠(yuǎn)程task服務(wù)的ip,如果是本機(jī)就是127.0.0.1,如果是集群就是lvs的ip
$task_connection = new AsyncTcpConnection('tcp://127.0.0.1:8889');
// 任務(wù)及參數(shù)數(shù)據(jù)
$request = [
'class' => 'app\service\User',
'method' => 'get',
'args' => [100], // 100 是 $uid
];
// 發(fā)送數(shù)據(jù)
$task_connection->send(json_encode($request));
// 異步獲得結(jié)果
$task_connection->onMessage = function($task_connection, $task_result)
{
// 結(jié)果
var_dump($task_result);
// 獲得結(jié)果后記得關(guān)閉異步連接
$task_connection->close();
// // 通知對(duì)應(yīng)的websocket客戶端任務(wù)完成
// $ws_connection->send('task complete');
};
// 執(zhí)行異步連接
$task_connection->connect();
}
無法得到$task_result
結(jié)果,看不到打印的結(jié)果
1.如果在一次http請(qǐng)求中,需要執(zhí)行一個(gè)繁重任務(wù),耗時(shí)10秒
2.在業(yè)務(wù)進(jìn)程中,將此任務(wù)扔給任務(wù)進(jìn)程處理
3.需要得到任務(wù)處理結(jié)果
4.不阻塞業(yè)務(wù)進(jìn)程(處理此次http請(qǐng)求的進(jìn)程)
在webman中,應(yīng)該如何操作?