Swoole入门:执行异步任务01(使用案列,简单逻辑梳理)

栏目: PHP · 后端 · 发布时间: 7年前

内容简介:Swoole入门:执行异步任务01(使用案列,简单逻辑梳理)

比如有这样一个需求:前端用户注册表单提交入库,紧接着发送确认邮件,然后赠送积分。

如果这三部分是一个同步任务,那么用户在前端要等待最后“赠送积分”完成,才能确定自己是否注册成功。

如果是异步任务,那么我们可以在”用户注册表单提交入库”成功之后,就返回给前端用户。

1、处理用户注册的 swoole 服务端代码 user_reg_server.php

<?php

/**
 * 这是我们处理用户注册swoole服务代码
 *
 */


$serv = new swoole_server("10.211.55.15", 9501);

// 设置异步任务的工作进程数量
$serv->set(array('task_worker_num' => 4));

$serv->on('receive', function($serv, $fd, $from_id, $data) {

    if(1){ // if里是伪代码:用户数据入库逻辑
        // 如果入库成功,后面2个任务才异步执行

        // 投递"发送邮件"这个异步任务
        $task_email = $serv->task($data); // 这里的$data 是客户端传递过来的
        // 投递"赠送积分"这个异步任务
        $task_gif = $serv->task($data);

        // 上面2个异步任务成功分发
        // 可以给客户端发送一个提示信息
        $serv->send($fd, "register success");
    }



});

// 处理异步任务
$serv->on('task', function ($serv, $task_id, $from_id, $data) {

    // 执行任务的具体代码
    echo "New AsyncTask[id=$task_id]".PHP_EOL;

    //返回任务执行的结果
    return 1; // 在onTask函数中只要return一个字符串或者非null的变量,都表示投递的task已完成
});

// 处理异步任务的结果
$serv->on('finish', function ($serv, $task_id, $data) {
    echo "AsyncTask[$task_id] Finish: $data".PHP_EOL;
});

// 开始
$serv->start();

2、客户端用户注册,连接上 swoole,传递数据 addUser.php

<?php
/*
 * 这是用户注册部分,用户注册逻辑(也就是我们的web网站可能和我们的Swoole服务不在同一台机器上)
 * */

$userInfo = ['name'=>'jack','email'=>'jack@qq.com']; // 这是我们准备传递给swoole服务端的数据

// 创建swoole客户端
$client = new swoole_client(SWOOLE_SOCK_TCP);

if (!$client->connect("10.211.55.15", 9501, -1))
{
    exit("connect failed. Error: {$client->errCode}\n");
}

// 发送 用户数据 到服务端
$client->send(json_encode($userInfo));

// 接收服务端返回的内容
echo $client->recv();

// 关闭客户端
$client->close();

开始服务,客户端去连接会很快返回register success。

服务端打印:

New AsyncTask[id=1]
New AsyncTask[id=0]
AsyncTask[1] Finish: 1
AsyncTask[0] Finish: 1

以上所述就是小编给大家介绍的《Swoole入门:执行异步任务01(使用案列,简单逻辑梳理)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

论因特网

论因特网

[美] 休伯特·L.德雷福斯 / 喻向午、陈硕 / 河南大学出版社 / 2015-5 / 32.00

本书是与日俱增的关于因特网利弊之文献的重要补充。 ——《哲学评论》 关于因特网种种承诺的一次清晰辨析……以哲学家的眼光审视一个影响我们所有人的问题。 ——《普遍存在》杂志 ……一场精心设计的论战……我们需要更多德雷福斯这样的老师,将网络融入依 然具有深邃人性的课程。 ——亚当•莫顿(出自《泰晤士报文学增刊》) 在互联网世界,不管你是菜鸟,还是浸淫其中已久—......一起来看看 《论因特网》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试