摘要:使用實現異步任務處理,有以下幾個目標能夠異步非阻塞處理任務能夠實時查詢任務狀態任務完成之后,可以執行一些操作或者回調內置的正好非常適合處理這種業務,示例代碼實現如下存儲任務處理結果和進度請求過濾返回任務狀態此處處理請求數
使用swoole實現異步任務處理,有以下幾個目標:
能夠異步非阻塞處理任務
能夠實時查詢任務狀態
任務完成之后,可以執行一些操作或者回調
swoole內置的swoole_http_server正好非常適合處理這種業務,示例代碼實現如下
php#!/bin/env php connect("127.0.0.1", 6379); $http->set([ "worker_num" => 2, "open_tcp_nodelay" => true, "task_worker_num" => 2, "daemonize" => true, "log_file" => "/tmp/swoole_http_server.log", ]); $http->on("request", function(swoole_http_request $request, swoole_http_response $response) use ($http, $redis) { //請求過濾 if($request->server["path_info"] == "/favicon.ico" || $request->server["request_uri"] == "/favicon.ico"){ return $response->end(); } $taskId = isset($request->get["taskId"]) ? $request->get["taskId"]: ""; if($taskId !== ""){ //返回任務狀態 $status = $redis->get($taskId); return $response->end("task: $taskId;status: $status"); } $params = json_encode(array(111,222));//此處處理requst請求數據作為任務執行的數據,根據需要修改 $taskId = $http->task($params); $response->end("Do task:$taskId.
"); }); $http->on("Finish", function($serv, $taskId, $data){ //TDDO 任務結束之后處理任務或者回調 echo "$taskId task finish"; }); $http->on("task", function($serv, $taskId, $fromId, $data) use($redis){ //任務處理,可以把處理結果和狀態在redis里面實時更新,便于獲取任務狀態 for($i = 0; $i < 100;$i++){ $redis->set($taskId, $i); sleep(1); } return $i;//必須有return 否則不會調用onFinish }); $http->start();
如有更好方案,請多多指教。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/30230.html
摘要:要實現上述的異步處理,只需要增加兩個事件回調即可和這兩個回調函數分別用于執行任務和處理任務的返回結果。還需要注意的是,服務器如果檢測到長時間沒有沒有查詢,則會斷開連接回收資源所以要有斷線重連的機制。 在一般的 Server 程序中都會有一些耗時的任務,比如:發送郵件、聊天服務器發送廣播等。如果我們采用同步阻塞的防水去執行這些任務,那么這肯定會非常的慢。 Swoole 的 TaskWor...
摘要:當某種網絡事件發生時,會回調用戶設置的指定回調函數。承擔了底層網絡事件的監聽及各種底層事件處理,當收到請求時,會觸發事件提醒,然后將控制權轉交預先注冊的事件回調函數,來進行后續的處理。請求到來時創建,請求結束后銷毀。 運行流程圖 showImg(https://segmentfault.com/img/remote/1460000017207791);showImg(https://s...
摘要:下文如無特殊聲明將使用進程同時表示進程線程。收到數據后服務器程序進行處理然后使用向客戶端發送響應。現在各種高并發異步的服務器程序都是基于實現的,比如。 并發 IO 問題一直是服務器端編程中的技術難題,從最早的同步阻塞直接 Fork 進程,到 Worker 進程池/線程池,到現在的異步IO、協程。PHP 程序員因為有強大的 LAMP 框架,對這類底層方面的知識知之甚少,本文目的就是詳細介...
閱讀 1980·2021-11-25 09:43
閱讀 664·2021-10-11 10:58
閱讀 1737·2019-08-30 15:55
閱讀 1735·2019-08-30 13:13
閱讀 746·2019-08-29 17:01
閱讀 1848·2019-08-29 15:30
閱讀 804·2019-08-29 13:49
閱讀 2181·2019-08-29 12:13