php web ,超时问题,怎么开启一个脚本,然后自己正常返回,不等待

 蓝雪帝国666 发布于 2022-11-28 16:10

例如

给特定1万人发邮件全服查询并更新某个字段这种web简单操作都会超时的,有什么处理办法吗?1.把输入信息放在redis中,然后后台有个一直运行的php进程,做处理但这种情况,我以后每次遇到,都得写个页面,还得对应后台写个一直运行进程2.有没有情况,我直接在web请求时,异步触发一个php脚本A,然后web返回,A就在后台一直运行到结束,没有超时情况3.不需要设置超时时间!也不能设置4.pclose(popen("/home/xinchen/backend.php&",'r'));这种我试了下,是请求完后,自动关闭了,不在后台接着运行...5.写crontab定时执行的话,以后每做一个页面,就得考虑这那能不能,有个脚本,web异步调用它????这个怎么弄,
4 个回答
  • 使用队列(queue),页面将需要处理的任务插入到队列表中。后台一直有一个daemon监测队列的变化,当有新的任务则执行对应的操作脚本,并将操作脚本的结果及日志进行记录

    2022-11-28 16:24 回答
  • 写个脚本,crontab定时执行。

    2022-11-28 16:24 回答
  • 其实,你这里真是的需求,只是希望在Web这边获取一种方式,来执行一个长达数小时的“异步”任务。就PHP而言,可以用2种方式来做:
    (1)在PHP里使用shell_exec的函数,以shell的方式,启动一个独立的PHP脚本执行。这种方式,其实相当于在Web服务器处理过程中,独立起了一个shell进程处理你的任务。这里,需要特别注意的是shell_exec的服务器安全,注意校验参数,小心避免被带入shell命令中。这个是比较容易实现的方式。
    (2)使用PHP实现一个Server,监听一个端口,为Web端提供服务。这里的实现方式有很多,通常要配合扩展,例如原生的pthread(多线程),开源扩展swoole等等。

    直接在web程序里使用多线程,是不恰当的,web请求通常有时间限制,例如timeout默认是30秒。你如何保证,在线程任务执行完之前,它的父进程仍然在工作?

    作者:徐汉彬
    链接:https://www.zhihu.com/questio...
    来源:知乎
    著作权归作者所有,转载请联系作者获得授权。

    2022-11-28 16:24 回答
  • 看看webSocket

    2022-11-28 16:24 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有