2016-05-26 191 views
0

我正在iOS上建立一個簡單的聊天應用程序的樂趣(並有項目獲得經驗),使用socketsIO和節點後端。我正試圖找出消息的最佳設計。我打算使用一個mongoDB數據庫,每個對話都會存儲它的消息數據。只要客戶端向服務器發送新消息,服務器就會將其添加到數據庫中適當的對話中。iOS的聊天應用程序設計

我也希望創建一個用戶註冊/登錄系統,它會將您添加到數據庫。 不過,我已經搜索了很多,我真的不確定創建一個由對話組成的數據庫(只要sentMessage事件被觸發就會得到更新)和用戶數據是正確的方法。 另外,我見過一些人談論在實際設備上保存聊天,而不是在數據庫中?什麼是這樣的聊天應用程序的常見設計模式?

回答

1

設計我也會使用socket.io發送消息。它背後有一個偉大的社區,我也使用MongoDb,因爲所有的東西都使用JSON格式,並且由於它使用JavaScript,所以它與Node完美集成。

現在你感興趣的部分是REDIS。 Redis是一個位於網絡RAM中的數據庫,如果您的流量更高/需要快速/更少的掛起和等待,應該與mongodb一起使用。

REDIS會是您與會話聊天的臨時保存,因爲在計算機上執行磁盤寫/讀/查詢操作非常多(查看您的MongoDB),如果您打算保存每條消息的聊天記錄。這樣做MongoDb從長遠來看並不會縮小所有的井,並且不如REDIS那麼快。請注意,REDIS數據庫只能保存臨時聊天記錄,比如最近的一百萬次聊天會話或一些限制(全部在RAM中,因此大小是有限的,在一臺服務器上不能有太字節或數百GB的RAM)。

這樣的數據流會看起來像

  1. 用戶發送消息
  2. 服務器通過HTTP(S)後/ PUT接收訊息話題 - 阿賈克斯/可觀察
  3. 服務器將使用socket.io發射通過特定的密鑰/會話/消息將消息保存到REDIS的同時將消息發送給指定用戶。
  4. 指定用戶通過io事件獲取屏幕上的更新。

- 中間應該檢查REDIS數據庫是否已滿。如果它已滿,則刪除最後的10,000條非活動消息(如果服務器尚未滿足,可以從1年前開始)刪除一些空間。

將通話保存在手機中是一個好主意,因爲它可以節省用戶數據/帶寬,並且可以在離線時查看他們的留言。 一個解決方案是使用SQL Lite,它是一個輕量級庫,它將作爲一個數據庫坐在您的應用程序中,您可以對其執行查詢,如果您熟悉RDBMS,您將不會遇到實現它的問題。但是現在,您必須找到一種管理將數據保存到REDIS/SQL-LITE/MongoDb的好方法。