欢迎大家访问我的博客 blog.ayla1688.cool
原文链接:http://blog.ayla1688.cool/archives/116.html
在使用thinkcmf 做项目的时候,有一些比较耗时的工作, 但是不想阻碍程序的进行,所以想到使用swoole 的异步任务。
场景:
我在添加了一个用户之后,需要通过接口将用户添加到有赞商城的销售员。 添加用户完成后将添加到有赞商城业务员的操作放到异步的任务中去执行, 这样就不影响我添加用户的操作; 如果不这么做的话,还需要等待通过接口将用户数据推送到有赞商城。 如果本地添加成功,但是添加到有赞商城添加失败,如果不回滚数据则两边对不上。 所以需要有一个异步任务去执行添加用户到有赞商城的销售员。
借助了以下东西:
1. thinkphp框架的钩子
2. swoole
### 设置钩子
在项目中添加钩子文件 app/tags.php
<?php
/**
* 钩子定义
* 钩子定义配置文件,在此框架内,只能放在app 下, 放在模块下不起作用
* 钩子的执行为同步执行,会对程序造成阻塞。
*/
return [
// '钩子名称' => ['行为类']
//添加销售员到有赞
'add_saleman_to_youzan' => [
'app\\common\\behavior\\YzTask',
],
YzTask.php 为钩子的执行类
<?php
namespace app\common\behavior;
//定义了一个行为 YzTask
use Swoole\Coroutine;
class YzTask
{
//swoole tcp server 监听的ip
protected $host ;
//swoole tcp server 监听的端口
protected $port;