2

我在我的一个 PHP/MySQL 站点上有一个简单而通用的内部消息传递服务,具有唯一的messageID, from, to, subject, message, time, 和isRead.

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

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

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

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

如果用户转到他的收件箱,它不应再向他显示他检查时收件箱中的任何邮件都有“新邮件”,无论他是否实际点击阅读它们。

谢谢!

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

4

2 回答 2

1

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

jQuery插件

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

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

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

于 2012-05-24T17:05:03.163 回答
0

在您的用户表中,存储新消息的计数,并在需要时进行更新。

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

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

于 2012-05-24T17:09:45.813 回答