您说您不想使用 cron 作业,因为您只希望消息发送一次,但这是对为此类任务编写 cron 作业的方式的误解
考虑这样一种情况,您有许多用户创建许多要在不同给定时间点发送的消息。
您不想让 PHP 程序一直在您的服务器上运行,以处理这些消息中的每一条;这会浪费服务器资源,即使它们都只是在sleep()这段时间内运行。
相反,人们会使用 cron 作业每分钟运行一次短暂的 PHP 程序(或任何适合您的时间间隔)。
您的消息创建程序不会被编写为实际发送消息;相反,它将连同需要发送的时间一起插入到数据库中。
同时,cronjob PHP 程序会每分钟扫描一次这个数据库,看看是否有任何消息要发送但尚未发送。然后它将发送这些消息并在数据库上将它们标记为“已发送”。
这是编写这种东西的标准方式,所以人们向你推荐它并不奇怪。
这样做意味着您的系统上运行的程序永远不会超过必要的时间。两个 PHP 程序都快速完成它们的工作并退出,这意味着没有人一直在等待它们。
它也使它更加健壮。想象一下,如果您的服务器必须重新启动。如果你有一堆 PHP 程序运行几个小时等待它们发送消息的时刻,它们都会丢失。另一方面,如果他们已将消息保存到数据库,则 cron 作业会在服务器重新启动后找到它们并正确发送它们。