有没有一种简单的方法可以像 Node.JS 一样异步执行 PHP 代码?

时间:2021-06-04 09:20:00

标签: php asynchronous

曾为一些项目使用 Node.JS,在收到请求时,您可以向用户发送响应,同时在幕后执行其他耗时的代码。

我有一个 PHP 应用程序,它使用自定义的 API 框架返回 JSON 数据。 当用户提交收件人的电子邮件地址和邮件消息时,我有一个发送电子邮件的路由。

需要提交所需的详细信息。如果详细信息正确,用户应立即收到确认回复,然后根据他们提供的详细信息开始查看电子邮件。

是否有任何解决方法,因为要立即向用户返回响应,我应该调用出口;将停止进一步执行代码的函数,请记住,发送电子邮件大约需要 10 秒?

2 个答案:

答案 0 :(得分:0)

您可以使用任何排队系统,如 redis、amqp 等。尽管推荐使用这种方法,但也有一些学习曲线,最好将它与已经提供适当传输的 PHP 框架结合使用。

参见 https://symfony.com/doc/current/messenger.html 作为 Symfony 示例

不过,我之前使用过的更简单的解决方案是自定义队列:

  1. 创建一个包含建议字段 [id、processing、email、date] 的表“队列”
  2. 将电子邮件信息保存为 json 字符串
  3. 有一个后台工作,比如 Linux 中的 cronjob,每隔几分钟运行一次,以实际发送电子邮件。

这样用户体验会好很多。

答案 1 :(得分:0)

要回答主题“如何在后台执行 PHP 代码?”中的问题,您的手被托管服务提供商束缚了。

现代托管服务提供商允许 exec() 和 cron 作业。我建议您寻找替代托管服务提供商。