检查用户是否有新邮件的最有效方法?

时间:2012-05-24 16:52:47

标签: php mysql database messaging

我在我的一个PHP / MySQL网站上有一个简单而通用的内部消息服务,具有唯一的messageIDfromtosubject,{{ 1}},messagetime

一般来说,检查用户是否有新邮件的最佳方法是什么?

我应该在主Users表上存储一个简单的二进制触发器,当有人向他们发送消息时,它会切换到1,然后让用户在每个页面加载时检查该1,如果有,则提醒他们新邮件(并在他们进入收件箱时将其设置为0)?但是如果它是垃圾邮件并且我们在用户阅读之前将其删除了呢?

或者我应该存储用户阅读的最后一条消息的isRead,然后检查最新消息,看看它是否比他读过的最后一条消息更新,如果是这样警告他?但那么我应该如何以及在哪里存储这些信息?

考虑到我们必须在每个页面加载上检查新消息,还有另一种更有效的方法吗?

如果用户进入他的收件箱,则不应再向他显示他在检查收件箱时收到的任何邮件都有“新邮件”,无论他是否真的点击过来阅读或不。

谢谢!

编辑:我的一些用户从没有cookie甚至是Javascript的非常基本的手机访问我的网站,所以请记住这一点。

2 个答案:

答案 0 :(得分:1)

最好的方法是使用html套接字从服务器推送通知,就像stackoverflow一样。

jquery plugin

但请记住,所有浏览器都不支持,因此需要回退到ajax轮询。

关于垃圾邮件我建议只在垃圾邮件检查完成后通知用户,如果可能的话。

你的解决方案存储在用户旁边,设置位听起来是正确的,(你也可以存储新消息的数量,而不是位)

答案 1 :(得分:0)

在您的用户表中,存储新邮件的数量,并在需要时进行更新。

AJAX轮询在服务器端可能很昂贵(当您的数据库变大时select count(*) from ...可能很昂贵,而且您需要这样做,例如,每分钟一次检查)。

如果用户只是在您的网站上浏览,并且没有新消息,您可以跳过select有关消息的更多信息。