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

例如

给特定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秒。你如何保证,在线程任务执行完之前,它的父进程仍然在工作?

作者:徐汉彬

链接:https://www.zhihu.com/questio…

来源:知乎

著作权归作者所有,转载请联系作者获得授权。

看看 webSocket

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值