例如
给特定1万人发邮件全服查询并更新某个字段这种web简单操作都会超时的,有什么处理办法吗?1.把输入信息放在redis中,然后后台有个一直运行的php进程,做处理但这种情况,我以后每次遇到,都得写个页面,还得对应后台写个一直运行进程2.有没有情况,我直接在web请求时,异步触发一个php脚本A,然后web返回,A就在后台一直运行到结束,没有超时情况3.不需要设置超时时间!也不能设置4.pclose(popen("/home/xinchen/backend.php&",'r'));这种我试了下,是请求完后,自动关闭了,不在后台接着运行...5.写crontab定时执行的话,以后每做一个页面,就得考虑这那能不能,有个脚本,web异步调用它????这个怎么弄,
使用队列(queue),页面将需要处理的任务插入到队列表中。后台一直有一个daemon监测队列的变化,当有新的任务则执行对应的操作脚本,并将操作脚本的结果及日志进行记录
写个脚本,crontab定时执行。
其实,你这里真是的需求,只是希望在Web这边获取一种方式,来执行一个长达数小时的“异步”任务。就PHP而言,可以用2种方式来做:
(1)在PHP里使用shell_exec的函数,以shell的方式,启动一个独立的PHP脚本执行。这种方式,其实相当于在Web服务器处理过程中,独立起了一个shell进程处理你的任务。这里,需要特别注意的是shell_exec的服务器安全,注意校验参数,小心避免被带入shell命令中。这个是比较容易实现的方式。
(2)使用PHP实现一个Server,监听一个端口,为Web端提供服务。这里的实现方式有很多,通常要配合扩展,例如原生的pthread(多线程),开源扩展swoole等等。
直接在web程序里使用多线程,是不恰当的,web请求通常有时间限制,例如timeout默认是30秒。你如何保证,在线程任务执行完之前,它的父进程仍然在工作?
作者:徐汉彬
链接:
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
看看webSocket