本文實(shí)例講述了PHP swoole和redis異步任務(wù)實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:
redis異步任務(wù)
interface.php
<?php for($i=0;$i<100;$i++){ $msg = "zhezhao[".$i."]"; $redis = new Redis(); $redis->connect("127.0.0.1"); $redis->publish("test",$msg); $redis->close(); }
handler.php
<?php $redis = new Redis(); $redis->connect("127.0.0.1"); $redis->subscribe(array("test"), 'handleFun'); function handleFun($redis, $chan, $data) { write($data); } function write($data){ $path = "/tmp/mailList-redis.log"; $str = "[".date("Y-m-d H:i:s")."]".$data; $str .= PHP_EOL; file_put_contents($path,$str,FILE_APPEND); }
swoole異步任務(wù)
interface.php
<?php for($i=0;$i<100;$i++){ $msg = "zhezhao[".$i."]"; $client = new swoole_client(SWOOLE_SOCK_TCP); $client->connect('127.0.0.1', 9501, 0.5); $client->send($msg); $client->close(); }
handler.php
<?php $serv = new swoole_server("127.0.0.1", 9501); $serv->set(array('task_worker_num' => 4)); $serv->on('receive', function($serv, $fd, $from_id, $data) { $task_id = $serv->task($data); }); $serv->on('task', function ($serv, $task_id, $from_id, $data) { handle($data); $serv->finish($data); }); $serv->start(); function handle($data){ sleep(2); mailLog("Send Mail successfully to $data"); } function mailLog($str){ $path = "/tmp/mailList.log"; $str = "[".date("Y-m-d H:i:s")."]".$str; $str .= PHP_EOL; file_put_contents($path,$str,FILE_APPEND); }
比較
redis異步任務(wù)日志
swoole異步任務(wù)日志
通過(guò)對(duì)比任務(wù)日志我們可以看到,由于swoole開(kāi)了4個(gè)進(jìn)程執(zhí)行異步任務(wù),所以處理異步任務(wù)的效率大概是redis的四倍,如果swoole只開(kāi)一個(gè)進(jìn)程的話,效率和redis幾乎沒(méi)有什么差別。
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《PHP進(jìn)程與線程操作技巧總結(jié)》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《PHP基本語(yǔ)法入門(mén)教程》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門(mén)教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com