我想在我们的网络项目中实现某种消息队列系统。我只是想知道这样做的最佳方法是什么。它是用 PHP(Yii 框架)编写的,以 MySQL 作为数据库系统。
想法:
- 用户 1 给用户 2 发送消息,但该消息将被放置在未来(即 02-11-2013 14:31)
- 用户 2 在 02-11-2013 14:31 在他/她的收件箱中收到来自用户 1 的消息,并收到有关此新消息的通知电子邮件。
我想了两种方法来做到这一点:
将来自用户 1 的消息插入到“消息”表中,其中包含应将消息传递给用户 2 的日期和时间。用户 2 只能在此日期和时间小于当前日期和时间 (
WHERE addTime <= NOW()
) 时阅读它。将来自用户 1 的消息插入到“消息队列”表中。这是一个表,其中包含将来需要放置的所有消息。cronjob(每分钟左右运行一次)会将日期和时间小于当前时间的所有消息放入“消息”表中,并将其从“消息队列”表中删除。可以直接向用户 2 发送电子邮件。
缺点:
- 方法一:没办法给用户2发送通知邮件
- 方法2:你将不得不设置一个每分钟运行一次的cronjob(一条消息可以放在未来,精度为一分钟)。通知邮件可以直接发送,但系统会很繁重,消息很多。如果 cronjob 花费的时间超过一分钟,它将相互重叠,最终可能导致服务器关闭。
有谁知道这样做吗?我实际上是在从服务器/数据库中寻找一些推送功能,它告诉我的脚本一条新消息已传递给用户 2,并且需要向用户 2 发送一封电子邮件。