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