【PHP】PHP实现简单的setTimeOut来完成异步延时
来源:互联网 发布:域名排名 编辑:程序博客网 时间:2024/06/06 02:44
一、需求来源。
- 开发微信公众号时,当用户关注我们的微信号,我们需要发送两条不同类型的消息给关注用户。注意是不同类型。这么说吧,要发送Type1,Type2两种消息回复给关注者。
- 其中关注这个事件,处理这个事件的流程如果发送了其中1个类型的消息,就无法发送另外一种了。意思就是无法同时发送两种。类似于http请求,回复一次就OK了,收到第一次的response,就结束了。
- 而且需求是另外的一种回复消息(Type2),必须要在主流程的消息之后发送。好在微信提供了接口——客服发送接口,该接口可以主动给用户发送消息。
二、实现上面的需求,并规范化。
//关注事件case "subscribe":$result = $this->transmitNews($content);// 生成Type1的消息// 格式化生成Type2的消息体$result_other = sprintf("***?先注册<a href='%s'>(点击注册)</a>吧", $url);$_arr = array( 'openid' => sprintf('%s', $this->fromUserName),// 格式化微信openid 'content' => $result_other, );$url = sprintf('%s/%s/%s', APP_URL, APP, PubCCCCConf::DDDDDDDDDDD_URL);// 利用nginx生成另外一个请求LibUtil::makeRequest($url, array('key' => PubCCCCConf::KKKKKKKKKK_KEY, 'cd_time' => 1, 'user_func' => 'ddddddddddMsg', 'json_str' => json_encode($_arr)), 1, 'POST');break;// 开始发送Type1主体消息
// 延时回调public function postAAAAAAAsync() { $this->setOutType('json'); $key = $this->R('key'); $cd_time = $this->R('cd_time', 0, 'int');// 单位s $user_func = $this->R('user_func', '', 'string');// 这个函数必须是这个类里的函数 $json_str = $this->R('json_str', '', 'string', true, NULL);// 参数 // 防刷机制 if ( $key != PubCCCCConf::KKKKKKKKKK_KEY ) { $this->out = array('code' => 3, 'data' => array(), 'msg' => '没有权限'); return; } // 最长时间300s if ( empty($user_func) || $cd_time >= 300 || !PubValidate::isJson($json_str)) { $this->out = array('code' => 2, 'data' => array(), 'msg' => '参数错误'); return; } $args = json_decode($json_str, true); $args['cd_time'] = $cd_time; call_user_func(array('Ctl*****',$user_func), $args); $this->out = array('code' => 1, 'data' => array(), 'msg' => 'SUCCESS');}// 这个最好是命名为私有函数private function ddddddddddMsg($param) { // 具体的处理逻辑 sleep($param['cd_time']);// 延时 ...}
1、我们看上面的代码,第1片代码中逻辑是,在正式发送Type1类消息时,先利用nginx生成另外一个请求,在另外一个请求中,延时cd_time时间,处理。
2、注意$key (防刷)、call_user_func的使用。
3、部分函数名、变量名丑陋是为了模糊处理。
参考:PHP实现类似javascript的setTimeout异步回调
微信公众号被关注后如何回复多条消息
0 0
- 【PHP】PHP实现简单的setTimeOut来完成异步延时
- PHP 简单 延时任务
- javascript的setTimeout实现延时提示框
- Jquery+ajax+php实现简单的异步提交
- PHP异步并发访问mysql简单实现
- js中常用的setTimeOut来延时调用
- PHP学习-完成简单的增删改
- PHP实现AOP的雏形(通过一个简单的实例来理解PHP的AOP)
- PHP使用swoole来实现实时异步任务队列
- PHP操作swoole来实现实时异步任务队列
- php+validate实现文本框的自动完成
- 利用PHPMailer 来完成PHP的邮件发送
- 利用PHPMailer 来完成PHP的邮件发送
- php实现异步操作
- php实现异步处理
- PHP异步实现
- 【php】php验证码的简单实现
- PHP curl实现异步的http请求
- oracle学习总结------ CRUD操作(create/retrleve/update/delete
- oracle学习总结-----------多表查询
- 回顾<string.h>中API
- virtualbox磁盘文件格式转换
- oracle学习总结-----子查询
- 【PHP】PHP实现简单的setTimeOut来完成异步延时
- Myeclipse TODO的使用
- 寒假集训 day6
- 多元线性回归
- mac_m4a转mp3
- Oracle学习总结-----分页查询
- HTTP常见状态码 200 301 302 404 500
- Linux学习笔记——例说makefile 头文件查找路径
- Kubernetes Scheduler的Predicates和Priorities Policies解读