您的位置:首页 > 编程语言 > PHP开发

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事件,就开始工作了。很抽象,下面看代码

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会自己处理进程的。你只需要设置一下,但是手册中每次都提到进程,主要是给有经验的开发者看的,他们会关注关于进程和现在的控制
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: