2012-05-24 92 views
2

我有我的PHP/MySQL的网站之一的简单和通用内部的消息服务,以独特的messageIDfromtosubjectmessagetimeisRead检查用户是否有新邮件的最有效方法?

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

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

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

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

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

谢谢!

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

+0

您的消息对象是否有状态字段,例如可以查询的“新建”或“读取”状态?在查看hotmail/gmail或类似的东西时,您可以将读取的邮件切换回未读,我假设他们也正在使用某种状态字段。 – Nope

+0

@Francois:我在我的OP中有一个isRead'字段,但是这是如果这个特定的消息被实际读取或没有。 “新消息”警报有点不同,因为它会在用户上次检查收件箱后收到新消息时提醒用户。那有意义吗? – ProgrammerGirl

+0

如何使用websocket?从服务器你可以以异步的方式发送消息到浏览器,然后浏览器可以做任何需要的信息 – marcelog

回答

1

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

jquery plugin

但是要在不被所有的浏览器支持的心态,所以需要将回落到AJAX投票。

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

您的解决方案在下一个存储用户与组位听上去不错,(你也可以储存新的信息的数量,而不是位)

+0

不幸的是,我的一些用户使用非常基本的手机,甚至不能使用AJAX,所以这看起来不是我的选择,因为我不想排除任何当前用户。另外,如果我删除垃圾邮件,我提到的设置位解决方案会成为问题,因为用户仍然会收到“新邮件”警报,然后会转到其收件箱,但不会看到任何新邮件(因为垃圾邮件已被删除)。这就是为什么我不能完成包装的最好办法做到这一点...... – ProgrammerGirl

+0

以及如果你删除并标记为垃圾邮件,然后更新用户表也。 –

+0

但我怎么知道它是否只是垃圾邮件是“新的”,或者是否还有其他新消息(在这种情况下,我仍然会*想向用户显示“新邮件”消息?) – ProgrammerGirl

0

在你的用户表,存储新邮件的数量,和更新时需要。

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

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

+0

如何根据什么事件更新该计数?我会在每个用户的页面上更新它吗?每当有人给他们发送消息?什么时候? – ProgrammerGirl

+0

其他用户发送消息时(1次)。用户每分钟可以读取1次或更多... –

相关问题