執行異步任務 (Task)
# server.php
$serv = new Swoole\Server("127.0.0.1", 9501);
// 設定異步任務的作業行程數量
$serv->set(array('task_worker_num' => 4));
$serv->on('Connect', function ($serv, $fd) {
echo "Client: Connect.\n";
});
// 此回呼函式在worker行程中執行
$serv->on('Receive', function ($serv, $fd, $from_id, $data) {
$serv->send($fd, "Server: ".$data);
// 向 task_worker 行程投遞異步任務,程式繼續向下執行代碼
$task_id = $serv->task($data);
echo "Dispatch AsyncTask: id=$task_id\n";
});
$serv->on('Close', function ($serv, $fd) {
echo "Client: Close.\n";
});
// 處理異步任務(此回呼函式在task行程中執行)
// 會將當前行程狀態切換為忙碌,不再接收任務;執行完成后切換為空閑,繼續接收任務
$serv->on('Task', function ($serv, $task_id, $from_id, $data) {
echo "New AsyncTask[id=$task_id]".PHP_EOL;
// 回傳任務執行的結果
$serv->finish("$data -> OK");
});
// 處理異步任務的結果(此回呼函式在worker行程中執行)
$serv->on('Finish', function ($serv, $task_id, $data) {
echo "AsyncTask[$task_id] Finish: $data".PHP_EOL;
});
$serv->start();
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/17472.html
標籤:PHP
