2017-08-08 172 views
-2

我正在嘗試使用deepstream.io實現真正的聊天。 在線許多教程都處理用戶間共享的一個聊天室,但問題在於,如果一個用戶刪除了一則消息,然後在所有用戶上刪除該消息。在普通聊天應用程序中,當用戶發送重複在發件人和收件人收件箱中的郵件時,每個用戶都有自己的收件箱。如何在deepstream.io上實現聊天?

所以我想出了這個。

  1. 使用一個偵聽所有正在發送的消息的全局偵聽器,然後將這些消息寫入數據庫。這意味着我正在使用事件偵聽器。這種方法的問題在於縮放,因爲只有一臺服務器不斷監聽和處理所有消息,更大的問題是服務器監聽是否停止,這意味着消息不會持續存在。

  2. 使用深層流列表和記錄。 這一個變得很複雜,我必須使用兩個列表?我的列表和收件人列表,訂閱我的任何更改,當我寫郵件時,這意味着我必須向兩個列表寫入相同的郵件。這也意味着,如果最後一條消息發生更改,我必須在客戶端訪問兩個收件箱,我也必須更新兩條記錄。所以我只允許在收件人列表中寫信,但不能刪除,因爲該列表不是我的。我不知道這件事,但它可能會失敗嗎?

也許有一些我失蹤了。有沒有人成功實施了帶收件箱的完整聊天應用程序,以及使用deepstream.io進行的私人消息傳遞?

+0

任何人投票的關懷說,爲什麼? – user3564573

回答

1

刪除要求肯定會讓這有點棘手,因爲您現在正在討論在用戶之間鏡像不同的數據集,但有幾個解決方案。

(使用列表和記錄)如果您的聊天記錄只有1比1,那麼當用戶刪除消息時,您在該記錄上設置了一個標記,指示用戶已將其刪除。然後,使用您的閥門權限,您不允許用戶在刪除它時看到消息。這將需要一些應用程序邏輯,然而這是相當乾淨的方法。你閥權限可能看起來像什麼如下

chat/$userA-$userB: 
    read: data.deletedBy !== user.id && (user.id === userA || user.id === userB) 

你也可以從列表中刪除記錄,但是你再結束了,你之前所描述的情況。

+0

謝謝我真的很喜歡你的解決方案。這樣我就不必複製這些消息。我已經嘗試過,它完美地工作, – user3564573