首页
下载
文档
问答社区
视频
捐赠
源代码
AI 助理
赞助商
CRMEB
Apipost
腾讯云
微擎
禅道
51Talk
商业产品
Swoole AI 智能文档翻译器
Swoole-Compiler PHP 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
task异步执行多次?
业务是客户端定时发送task异步至服务器的,服务端根据收到的数据进行业务处理。 处理过程中发现经常同时处理两次。不知道什么清空。我是15分钟发送一次至服务端,发送数据只有一次。但被执行两次,代码如下: > public function singleSend($params){ $robotId = $params['robotId']; $timerId = $params['timerId']; $robotInfo = $this->getRobotDetail($robotId); if(!$this->checkRobot($robotInfo)){ return true; } $this->sendRobotAllGroup($robotInfo ,$this->getGroupsByRobot($robotId)); } > public function sendRobotAllGroup($robot,$group=[]){ $this->setPrefix($robot); $wxId = $robot['wc_id']; wlog( [] ,"robot_send:".$robot['id']."group_count:".count($group)); foreach ($group as $k=>$v){ wlog( [] ,"group:{$v['id']} start"); if(!$v['wechatgroup_code']){ Wechatgroup::create()->where('id',$v['id'])->update(['status'=>6]); continue; } $v['group_space'] && $this->_group_space = $v['group_space']; $v['vedio_space'] && $this->_vedio_space = $v['vedio_space']; $v['img_space'] && $this->_img_space = $v['img_space']; $v['text_space'] && $this->_text_space = $v['text_space']; $send = new Send(); //设置代理的推广位 $robot['agent_uid'] && $send->setAgentPid($robot['agent_uid']); $send->setGroupId($v['id'],$robot); //获取内容 $content = $send->index(); wlog($content,"group:{$v['id']} "); //无数据 if($content['status'] ==1){ wlog( [] ,"group:{$v['id']} no data"); continue; } wlog( [] ,"group_send:".$v['id'] /*."_content:".json_encode($content)*/ ); $this->sendByWxId($wxId, $v['wechatgroup_code'] ,$content); // $space = ($k + 1)* $this->_group_space; //http接口发送 // \Swoole\Timer::after($space, function ()use($wxId,$v,$content) { // $this->httpSendData($wxId,$v,$content); // }); wlog( [] ,"group_done:".$v['id'] ); $this->_group_space && \Swoole\Coroutine\System::sleep($this->_group_space); // sleep($this->_group_space); unset($content); unset($send); } unset($group); } 上面是循环发送但过程,我打印 wlog($content,"group:{$v['id']} "); 被执行了两次。但group 里面只有一次这个id,搞不懂什么情况了。
发布于4年前 · 1 次浏览 · 来自
提问
C
Caption
业务是客户端定时发送task异步至服务器的,服务端根据收到的数据进行业务处理。 处理过程中发现经常同时处理两次。不知道什么清空。我是15分钟发送一次至服务端,发送数据只有一次。但被执行两次,代码如下: > public function singleSend($params){ $robotId = $params['robotId']; $timerId = $params['timerId']; $robotInfo = $this->getRobotDetail($robotId); if(!$this->checkRobot($robotInfo)){ return true; } $this->sendRobotAllGroup($robotInfo ,$this->getGroupsByRobot($robotId)); } > public function sendRobotAllGroup($robot,$group=[]){ $this->setPrefix($robot); $wxId = $robot['wc_id']; wlog( [] ,"robot_send:".$robot['id']."group_count:".count($group)); foreach ($group as $k=>$v){ wlog( [] ,"group:{$v['id']} start"); if(!$v['wechatgroup_code']){ Wechatgroup::create()->where('id',$v['id'])->update(['status'=>6]); continue; } $v['group_space'] && $this->_group_space = $v['group_space']; $v['vedio_space'] && $this->_vedio_space = $v['vedio_space']; $v['img_space'] && $this->_img_space = $v['img_space']; $v['text_space'] && $this->_text_space = $v['text_space']; $send = new Send(); //设置代理的推广位 $robot['agent_uid'] && $send->setAgentPid($robot['agent_uid']); $send->setGroupId($v['id'],$robot); //获取内容 $content = $send->index(); wlog($content,"group:{$v['id']} "); //无数据 if($content['status'] ==1){ wlog( [] ,"group:{$v['id']} no data"); continue; } wlog( [] ,"group_send:".$v['id'] /*."_content:".json_encode($content)*/ ); $this->sendByWxId($wxId, $v['wechatgroup_code'] ,$content); // $space = ($k + 1)* $this->_group_space; //http接口发送 // \Swoole\Timer::after($space, function ()use($wxId,$v,$content) { // $this->httpSendData($wxId,$v,$content); // }); wlog( [] ,"group_done:".$v['id'] ); $this->_group_space && \Swoole\Coroutine\System::sleep($this->_group_space); // sleep($this->_group_space); unset($content); unset($send); } unset($group); } 上面是循环发送但过程,我打印 wlog($content,"group:{$v['id']} "); 被执行了两次。但group 里面只有一次这个id,搞不懂什么情况了。
赞
0
分享
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
评论
2020-05-13
鲸落
swoole,php版本。 然后可以提供一份简单可复显的代码么
赞
0
回复
2020-05-13
郭新华
肯定是你业务逻辑出现了bug,不要贴业务代码上来
赞
0
回复
微信公众号
热门内容
作者其它话题
- swoole 内存泄露怎么办?trackerHookMalloc 直接爆内存
- 定时器创建成功却不执行是为什么?
- 为什么循环创建的定时器ID不连续
- WARNING swWorker_discard_data (ERRNO 1007): [2] received the wrong data[89 bytes] from socket#5
- 大量的curl是否会导致task任务时间错乱呢?
暂无回复的问答
- CodeGalaxy K3s 轻量集群节点之间如何实现负载均衡
- 关于openssl CURL WARNING swSSL_connect: SSL_connect(fd=69) failed. Error: error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small[1|394]
- 多个模型如何进行事务异常回退?
- websocket开启wss报错
- 协程tcp服务器如何使用多进程?recv()方法接收信息,打印出来的pid一直是同一个。没用使用到多进程啊。