异步运行PHP任务我在一个有点大的Web应用程序上工作,后端主要是PHP。在代码中有几个地方我需要完成一些任务,但我不想让用户等待结果。例如,当创建一个新的帐户,我需要给他们一个欢迎电子邮件。但是当他们按下“完成注册”按钮时,我不想让他们等到电子邮件被实际发送之后,我只想启动这个过程,并立即向用户返回一条消息。到目前为止,在某些地方,我一直在使用与exec()类似的黑客攻击。基本上是这样做的:exec("doTask.php $arg1 $arg2 $arg3 >/dev/null 2>&1 &");这似乎有效,但我想知道是否有更好的方法。我正在考虑编写一个在MySQL表中排队任务的系统,以及一个单独的长期运行的PHP脚本,该脚本每秒查询该表一次,并执行它找到的任何新任务。如果需要的话,这样做还可以让我将来将任务分给几台工人机器。我在重新发明方向盘吗?有比exec()黑客或MySQL队列更好的解决方案吗?
3 回答
largeQ
TA贡献2039条经验 获得超7个赞
-这个答案是在2009年写的,从那以后,GearMan看起来是一个很受欢迎的选择,见下面的评论。 如果您想要一个完整的开放源码消息队列。 -这是一个非常酷的套接字库,它可以轻松地编写分布式代码,而不必过于担心套接字编程本身。您可以将它用于单个主机上的消息队列?您只需让您的webapp将某些内容推送到一个队列中,在下一个合适的机会下,一个连续运行的控制台应用程序就会使用该 -只在写这个答案时找到了这个,但看起来很有趣 是一个基于PHP的消息队列项目,但自2010年9月以来一直没有得到积极维护 是最近(2017年)维护的针对各种队列系统的包装器。 最后,一篇关于使用
aluckdog
TA贡献1847条经验 获得超7个赞
$socketcon = fsockopen($host, 80, $errno, $errstr, 10);if($socketcon) { $socketdata = "GET $remote_house/script.php?parameters=... HTTP 1.1\r\nHost: $host\r\nConnection: Close\r\n\r\n"; fwrite($socketcon, $socketdata); fclose($socketcon);}// repeat this with different parameters as often as you like
ignore_user_abort(true);set_time_limit(0);
- 3 回答
- 0 关注
- 639 浏览
添加回答
举报
0/150
提交
取消