PHP使用swoole来实现实时异步任务队列

2 篇文章 0 订阅

看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会自己处理进程的。你只需要设置一下,但是手册中每次都提到进程,主要是给有经验的开发者看的,他们会关注关于进程和现在的控制

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值