【问题标题】:Will PHP sleep function slow down my site [closed]PHP睡眠功能会减慢我的网站速度[关闭]
【发布时间】:2014-06-30 11:08:50
【问题描述】:

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

不过,我也有found suggestions that sleep() might slow down the server

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

【问题讨论】:

  • 在您链接的第二个主题中查看 Vlads 的答案。不要使用睡眠。通过使用你最大的资产,你的大脑,你可以想出一个更优雅的解决方案。每 4 分钟执行一次的作业队列或 cronjob 将是理想的。您可以将待处理作业存储在数据库中,然后 cron 或作业队列可以从待处理操作列表中读取。
  • 我假设您限制邮件发送,因为您的主机会限制您发送更多邮件 - 更改为允许您发送所需邮件量的帐户不是更好的主意,或者单独的邮件发送服务
  • @Dagon 或者在脚本中使用带有一些 PHP 逻辑的 cron 作业来更好地管理邮件流?因为sleep 是解决这个问题的错误工具。
  • 我仍然认为这是绕过限制的“黑客”

标签: php email cron sleep


【解决方案1】:

不过,我也发现sleep 可能会减慢 服务器。

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

sleep 的目的是暂停您的脚本。如the official PHP documentation中所述:

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

是的,它会减慢您的服务器速度。但仅限于 sleep 处于活动状态的内容或页面上。

因此,如果这是一个带有sleep 的前端脚本,它会减慢任何人通过使用sleep 的PHP 脚本查看内容的能力。将其放置在 HTML 呈现延迟 1 秒的页面中间,您的页面现在需要多 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 是什么以及它们不是什么,后退一步并更好地构建您的脚本以满足您的需求可能是值得的。

【讨论】:

    【解决方案2】:

    通常由一个单独的工作人员和一个队列管理器完成。

    就是这样:您有一个发送电子邮件工作人员绑定到的队列管理器(即 RabbitMQ),

    然后,当您需要发送 10 封电子邮件时,您可以在提供 HTTP 响应的脚本中一次将它们全部放入相应的队列中。这一步是即时的。

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

    【讨论】:

      猜你喜欢
      • 2012-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-07
      • 1970-01-01
      相关资源
      最近更新 更多