PHP睡眠功能会减慢我的网站速度

时间:2014-06-30 00:37:10

标签: php email cron sleep

我正在寻找每1分钟发送一封电子邮件的方法。我查看了以下示例where the top answer is to use PHP sleep() function

但是,我也found suggestions that sleep() might slow down the server

我不是在寻找确切的答案,但一般方法会很棒。

2 个答案:

答案 0 :(得分:2)

  

但是,我也发现sleep可能会减慢速度的建议   服务器

是的,点击计算机上播放的电影上的pause按钮会根据您pause电影的时间减慢电影的持续时间。

sleep的目的是暂停脚本。如the official PHP documentation

中所述
  

将程序执行延迟指定的秒数。

所以是的,它减慢了你的服务器速度。但仅适用于sleep处于活动状态的内容或网页。

因此,如果这是一个带有sleep的前端脚本,则会降低任何人通过使用sleep的PHP脚本查看内容的能力。将它放在HTML正在呈现的页面中间,延迟时间为1秒。您的页面现在需要1秒钟才能渲染。

如果这是一个后端进程,只有你真正知道或触发,没什么大不了的。无论如何,这是一个后台进程,所以它只会在这个领域放慢速度。

那就是说,让我们看看你的核心问题,这是你帖子的第一句话:

  

我正在寻找每1分钟发送一封电子邮件的方式。

那么你要找的是cron工作,这是Unix / Linux系统上的一个定时工作。每分钟发送邮件的cron作业的条目可能是这样的:

* * * * * /full/path/to/php /full/path/to/your/php/script.php

但那是肤浅的。它基本上只是每分钟触发script.php。然后在你的script.php内你必须创建一些核心逻辑来控制每次触发时发生的事情。如果您正在使用数据库,那么也许您可以创建一个last_sent字段,在该字段中您发送了上次将邮件发送给收件人的时间戳,然后您对此进行操作。但同样,逻辑基于您的核心需求。

但是在一天结束时,我不太清楚sleep将如何影响到这一点。可能值得退后一步,更好地设计您的脚本以满足您的需求,了解cron是什么,sleep是什么&他们也不是。

答案 1 :(得分:1)

通常由分离的worker和队列管理器完成。

它是这样的:你有一个发送电子邮件工作者所绑定的队列管理器(即RabbitMQ),

然后,当您需要发送10封电子邮件时,您可以在提供HTTP响应的脚本中一次将所有这些电子邮件放入相应的队列。这一步是立竿见影的。

然后,工作人员逐个阅读电子邮件,并按要求延迟发送电子邮件。这个步骤需要一些时间,但我们不在乎。