我想在我们的Web项目中实现某种消息队列系统。我只是想知道什么是最好的方法。它是用PHP(Yii Framework)编写的,以MySQL作为数据库系统。

这个想法:


用户1向用户2发送一条消息,但该消息将被放置在将来(例如02-11-2013 14:31)
用户2在02-11-2013 14:31在其收件箱中从用​​户1接收消息,并接收有关此新消息的通知电子邮件。


我考虑了两种方法来做到这一点:


将来自用户1的消息插入带有消息应发送给用户2的日期和时间的“消息”表中。仅当该日期和时间小于当前日期和时间(WHERE addTime <= NOW())时,用户2才能阅读该消息。 。
将来自用户1的消息插入“ messageQueue”表中。该表包含将来需要放置的所有消息。 cronjob(每分钟左右运行一次)会将日期和时间小于当前时间的所有消息放入“ message”表,并将其从“ messageQueue”表中删除。电子邮件可以直接发送给用户2。


缺点:


方法1:无法将通知电子邮件发送给用户2
方法2:您将必须设置一个每分钟运行一次的cronjob(将来可以以一分钟的精度放置一条消息)。通知电子邮件可以直接发送,但是它将是一个沉重的系统,包含许多消息。如果cronjob花费的时间超过一分钟,它将相互重叠,最终可能导致服务器关闭。


有谁知道这样做吗?我实际上正在从服务器/数据库中寻找某种推送功能,该功能告诉我的脚本新消息已传递给用户2,并且电子邮件需要发送给用户2。

最佳答案

您可以使用CURL而不是CRON来自动请求您的“ CRON JOB SCRIPT”。
在先前完成后将调用它。如果脚本将在1分钟左右的时间内运行,您可能想延迟CURL请求。

10-07 19:49
查看更多