PHP如何提前返回数据继续后台执行任务
本帖最后由 zch11230 于 2022-3-4 09:14 编辑搭了个PHP服务,简单自用,就现在有个场景,比如go-cqhttp这个机器人,可以通过php上报事件,我收到离线文件消息时,PHP就去把文件下载回来,但是下载文件需要时间,这个时候C端迟迟没收到返回就会重发,导致重复收到消息。期间也因阻塞,不能及时响应别的新消息,我尝试了一下把ehco放到下载任务之前也没用。就能不能提前把数据返给C端,这边再继续执行自己的下载任务。
你想要的是 flush ??
echo “xxxx”
ob_flush();
flush();
//下载任务 任务ID多写个接口判断一下{:1_887:}
// 发送response数据
fastcgi_finish_request();
// 下载逻辑 flush() 吗 感谢大家解答,有你们真好。 你的这个需求的话,应该按队列设计才较为合理,创建队列task,当有任务时,压入task内,然后吐出返回值。这就是客户端完成。
后台新挂个守护进程,循环监控task队列,当有任务时,就取出,进行下载,完成,这样才比较合理 你直接后台写个消费队列,首先把上传需要的信息放到对列中,然后返回给前端信息,正在下载,后台跑一个cli或者进程,去不断消费进程就行了。 确实采用异步化的队列比较合适:
1 c端增加一个标识,标识php是否已经下载了文件,并记录发送时间,与检测时间;
2 c端在发给php端的时候,php端接收消息后启动一个队列去下载文件,而后马上返回给c端成功的消息,但是c端也需要一个队列,比如设置30分钟需要再次请求php得到回执数据,如果没有得到正确的响应,那么这么长时间就算超时了,也需要c端重新发起一次流程; 我在这里学编程{:1_907:}
页:
[1]
2