2016-03-12 66 views
1

我在節點頂部使用socket-io來管理聊天應用程序。如何檢查通過socket-io發送的消息是否被讀取?

我在想,一旦收到消息,我該如何檢查消息的「看到」和「看不見」狀態。有沒有關於jQuery的事件?我不確定我是否應該從jquery或socket-io端來管理它。謝謝!

回答

3

您必須實現自己的邏輯,以便在讀取消息時發送迴應。 沒有這樣的socket-io jquery事件可以在讀取時觸發.Yon可以通過檢查如果選項卡當前處於活動狀態而發出消息,因爲如果該選項卡當前是可以考慮讀取消息的方式活動或您的聊天窗口打開。

+0

謝謝!如果我可以要求完成問題,我將如何繼續檢查選項卡是否處於活動狀態? –

+0

@ J.Gal - 你會嘗試在window.onfocus和window.onblur事件上設置一個標誌。 以下代碼片段已經在Firefox,Safari和Chrome-var isActive上測試過; (window).focus(function(){ isActive = true; }); (window).blur(function(){ isActive = false; }); –

2

閱讀郵件時,您必須發回郵件。沒有什麼時候在socket.io中讀取某些東西的概念。

這是你必須在自己的用戶界面中發明的東西,當你認爲它被讀取時,你可以發送一條消息給發送者,表明它現在被讀取。除非每封郵件都需要採取某些措施才能將其打開(如電子郵件通常所做的那樣),否則很可能很難知道收件人實際上何時「讀取」了該郵件。在典型的聊天程序中,消息只是自動顯示,您不知道收件人是否正在查看它。

+0

這是有道理的,但是「閱讀」將意味着消息被「傳遞」,而不是被用戶實際讀取。示例:假設用戶正在瀏覽一個選項卡上的reddit,並且傳遞了該消息。它仍然沒有閱讀。這就是我想要分辨的東西。 –

+0

@ J.Gal - 您的服務器不知道它何時交付?在收件人不在線的情況下,您是否在服務器中排隊郵件,然後在用戶上線時發送郵件?如果是這種情況,那麼當服務器可以將它發送給收件人時,您只需要從服務器發回一條消息給發件人。您在這裏沒有解釋關於您的服務器架構的任何內容,所以這只是一個想法。 – jfriend00

+0

是的,我明白你的意思,但我的興趣在於知道何時閱讀郵件,沒有發送。我不認爲服務器有任何要做的事情,我認爲這取決於用戶是否在聊天頁面。 –

0

爲了管理看到/看不見,我們需要在收到/讀取用戶後觸發後臺消息,這就像確認收據一樣。很簡單。