本文实例讲述了PHP swoole和redis异步任务实现方法。分享给大家供大家参考,具体如下:
redis异步任务
interface.php
1
2
3
4
5
6
7
8
|
<?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
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<?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异步任务
interface.php
1
2
3
4
5
6
7
8
|
<?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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<?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异步任务日志
swoole异步任务日志
通过对比任务日志我们可以看到,由于swoole开了4个进程执行异步任务,所以处理异步任务的效率大概是redis的四倍,如果swoole只开一个进程的话,效率和redis几乎没有什么差别。
希望本文所述对大家PHP程序设计有所帮助。
原文链接:https://blog.csdn.net/koastal/article/details/52869140