吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1925|回复: 12
收起左侧

[已解决] PHP如何提前返回数据继续后台执行任务

[复制链接]
zch11230 发表于 2022-3-3 23:51
本帖最后由 zch11230 于 2022-3-4 09:14 编辑

搭了个PHP服务,简单自用,就现在有个场景,比如go-cqhttp这个机器人,可以通过php上报事件,我收到离线文件消息时,PHP就去把文件下载回来,但是下载文件需要时间,这个时候C端迟迟没收到返回就会重发,导致重复收到消息。期间也因阻塞,不能及时响应别的新消息,我尝试了一下把ehco放到下载任务之前也没用。就能不能提前把数据返给C端,这边再继续执行自己的下载任务。

免费评分

参与人数 1热心值 +1 收起 理由
夫子点灯 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xifangczy 发表于 2022-3-4 00:33
你想要的是 flush ??

[PHP] 纯文本查看 复制代码
echo “xxxx”
ob_flush();
flush();
//下载任务
Raohz520 发表于 2022-3-4 08:28
icelemon1314 发表于 2022-3-4 08:34

[PHP] 纯文本查看 复制代码
// 发送response数据
fastcgi_finish_request(); 
// 下载逻辑

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
zch11230 + 1 + 1 感谢大家帮忙,测试了下大家给的函数,成功解决了问题,也学到了新的知识。

查看全部评分

Sen 发表于 2022-3-4 09:01
flush() 吗

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Peisen + 1 + 1 我很赞同!

查看全部评分

 楼主| zch11230 发表于 2022-3-4 09:14
感谢大家解答,有你们真好。
归隐小赵 发表于 2022-3-4 09:20
你的这个需求的话,应该按队列设计才较为合理,创建队列task,当有任务时,压入task内,然后吐出返回值。这就是客户端完成。
后台新挂个守护进程,循环监控task队列,当有任务时,就取出,进行下载,完成,这样才比较合理
hanyudanei 发表于 2022-3-4 09:32
你直接后台写个消费队列,首先把上传需要的信息放到对列中,然后返回给前端信息,正在下载,后台跑一个cli或者进程,去不断消费进程就行了。
stu2162583 发表于 2022-3-4 09:43
确实采用异步化的队列比较合适:

1 c端增加一个标识,标识php是否已经下载了文件,并记录发送时间,与检测时间;
2 c端在发给php端的时候,php端接收消息后启动一个队列去下载文件,而后马上返回给c端成功的消息,但是c端也需要一个队列,比如设置30分钟需要再次请求php得到回执数据,如果没有得到正确的响应,那么这么长时间就算超时了,也需要c端重新发起一次流程;
傅粉何郎 发表于 2022-3-4 10:02
我在这里学编程
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 15:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表