PHP使用swoole来实现实时异步任务队列
2017-06-03 14:02
573 查看
看swoole的官方文档,真的很迷茫,文档里都是些零碎的点,这些点怎么串起来的,还得需要自己摸索。比如手册里将不同的进程分开来讲,但实际开发的过程中,使用却是一起使用的。比如任务队列。手册里的资料有一下几个地方
https://wiki.swoole.com/wiki/page/481.html
https://wiki.swoole.com/wiki/page/134.html
https://wiki.swoole.com/wiki/page/54.html
第一个是实例,但第二个和第三个页面确实从进程的角度去讲的,如果没有开发经验,的人真的很难明白是怎么回事。
下面说下我的理解吧。
server 函数列表https://wiki.swoole.com/wiki/page/15.html
server事件列表https://wiki.swoole.com/wiki/page/41.html
server中所有的函数都是主动发起一件事,而与之对应的,都有一个事件去接收。这就好比一个老板一个秘书,老板说我要去酒店,于是秘书就订酒店。对应到swoole中,函数就是老板,函数说我要发起一个任务,于是onTask事件,就开始工作了。很抽象,下面看代码
看到是不是有点绕,为什么没有进程呢?这是因为开发过程中你无需关注进程,只需要使用server。swoole会自己处理进程的。你只需要设置一下,但是手册中每次都提到进程,主要是给有经验的开发者看的,他们会关注关于进程和现在的控制
https://wiki.swoole.com/wiki/page/481.html
https://wiki.swoole.com/wiki/page/134.html
https://wiki.swoole.com/wiki/page/54.html
第一个是实例,但第二个和第三个页面确实从进程的角度去讲的,如果没有开发经验,的人真的很难明白是怎么回事。
下面说下我的理解吧。
server 函数列表https://wiki.swoole.com/wiki/page/15.html
server事件列表https://wiki.swoole.com/wiki/page/41.html
server中所有的函数都是主动发起一件事,而与之对应的,都有一个事件去接收。这就好比一个老板一个秘书,老板说我要去酒店,于是秘书就订酒店。对应到swoole中,函数就是老板,函数说我要发起一个任务,于是onTask事件,就开始工作了。很抽象,下面看代码
class msgServer { private $serv; function __construct() { $this->serv = new Swoole\Server("127.0.0.1", 9501);//创建一个服务 $this->serv->set(array('task_worker_num' => 4)); //配置task进程的数量 $this->serv->on('receive', array($this, 'onReceive'));//有数据进来的时候执行 $this->serv->on('task', array($this, 'onTask'));//有任务的时候执行 $this->serv->on('finish', array($this, 'onFinish'));//任务结束时执行 $this->serv->start(); } public function onReceive($serv, $fd, $from_id, $data) { $data = json_decode($data, true); $task_id = $serv->task($data);//这里发起了任务,于是上面的on('task', array($this, 'onTask'))就会执行 } public function onTask($serv, $task_id, $from_id, $data) { $data['send_res'] = $this->sendMsg($data); //发送短信 //1.7.3之前,是$serv->finish("result"); return "result.";//这里告诉任务结束,于是上面的on('finish', array($this, 'onFinish'))就会执行 } public function onFinish($serv, $task_id, $data) { $this->addSendLog($data); //添加短信发送记录 } } $msgServ = new msgServer;
看到是不是有点绕,为什么没有进程呢?这是因为开发过程中你无需关注进程,只需要使用server。swoole会自己处理进程的。你只需要设置一下,但是手册中每次都提到进程,主要是给有经验的开发者看的,他们会关注关于进程和现在的控制
相关文章推荐
- PHP使用swoole来实现实时异步任务队列
- PHP使用swoole来实现实时异步任务队列
- PHP使用swoole来实现实时异步任务队列
- PHP操作swoole来实现实时异步任务队列
- Swoole来实现实时异步任务队列
- Swoole来实现实时异步任务队列
- 用php实现异步执行任务的队列(二)
- 使用swoole实现异步任务处理
- 使用php的swoole扩展实现数据实时更新(上)
- 用php实现异步执行任务的队列(一)
- 使用php的swoole扩展实现数据实时更新(下)
- 自己实现异步执行任务的队列(一)(转)
- 用PHP实现守护进程任务后台运行与多线程(php-resque使用说明)
- 用PHP实现守护进程任务后台运行与多线程(php-resque使用说明)
- 用PHP实现守护进程任务后台运行与多线程(php-resque使用说明)
- 使用python的分布式任务队列huey实现任务的异步化
- PHP中使用sleep函数实现定时任务实例分享
- linux使用crontab实现PHP执行计划定时任务
- php使用inotify实现队列处理
- 用PHP实现守护进程任务后台运行与多线程(php-resque使用说明)