分叉 PHP 脚本以继续处理电子邮件并将 return 数据发送给用户是否可以接受?

Is it acceptable to fork a PHP script to continue email processing and to return data to the user?

我正在向现有网站添加电子邮件功能,并尝试以需要最少用户等待时间的方式进行集成。

我的最新计划是在应用程序开始发送实际电子邮件时分叉用户的请求,这样我就可以 return 向用户发送一条消息,说明他们正在发送消息。我想防止因用户请求需要发送许多单独的电子邮件而导致长时间延迟。

我考虑过(甚至实施了)一个 cron 作业解决方案,但我认为设置起来工作量太大——我希望能够将它放在 Linux 盒子上,而不必担心设置 cron 作业。

除了创建新数据库连接和关闭用户会话的问题外,在我使用 pcntl_fork? 管理电子邮件之前,还有什么让 "don't do it this way" 尖叫的吗 cron 作业比分叉有什么好处我没看到?

最简单的解决方案是实现一个数据库支持的电子邮件队列,其最简单的形式如下所示:

  1. 当用户提交表单时,将消息参数(发件人、收件人、消息等)写入数据库 table,包括时间戳(例如在名为 created_at 的列中)消息提交后。
  2. 然后您可以立即向用户显示成功页面。
  3. 让 cronjob 处理数据库 table (SELECT * FROM mytable ORDER BY created_at DESC),发送电子邮件并从 table 中删除行或将条目标记为已发送(例如,使用额外的列 sent_at).

可以 分叉 PHP 进程,但这会使您的应用程序的编码和可移植性变得更加困难,所以我不建议这样做。