2012-05-24 91 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次或更多... –

相關問題