你说你不想使用cron作业,因为你只需要发送一次的消息,但这些消息发送这是误解t的方式将为此类任务编写一个cron作业
考虑一种情况,即您有许多用户创建许多要在各个给定时间点发送的消息。
您不希望有一个PHP程序坐在您的服务器上,随时为您的服务器上的每个消息;这会浪费服务器资源,即使它们在整个过程中都只是sleep()
。
相反,人们会使用cron作业每分钟运行一次短暂的PHP程序(或任何适合您的间隔)。
您的消息创建程序不会被写入以便发送消息;相反,它会将它插入到数据库中,以及它需要发送的时间。
同时,cronjob PHP程序会每分钟扫描一次该数据库,看看是否有任何消息是由于发送而尚未发送的。然后它会发送这些消息并将它们标记为“发送”在数据库上。
这是写这种东西的标准方式,所以人们向你推荐它并不奇怪。
这样做意味着你永远不会有在你的系统上运行的程序超过必要的时间。这两个PHP程序都快速完成工作并退出,这意味着没有人会一直等待它们。
它也使它更加健壮。想象一下,如果你的服务器必须重新启动。如果你有一大堆PHP程序运行几个小时,等待他们发送消息,那么他们都会丢失。另一方面,如果他们已将消息保存到数据库中,那么cron作业将找到它们并在服务器重新启动后正确发送它们。
来源
2013-02-13 16:22:15
SDC
你舒尔它块完整的PHP?因为每个执行php cli应该导致一个自己的线程? – Dukeatcoding 2013-02-13 16:10:43
你为什么把睡眠放在'exec'中? – 2013-02-13 16:10:54
顺便说一句。我们在谈论什么样的信息 – Dukeatcoding 2013-02-13 16:11:26