設計我也會使用socket.io發送消息。它背後有一個偉大的社區,我也使用MongoDb,因爲所有的東西都使用JSON格式,並且由於它使用JavaScript,所以它與Node完美集成。
現在你感興趣的部分是REDIS。 Redis是一個位於網絡RAM中的數據庫,如果您的流量更高/需要快速/更少的掛起和等待,應該與mongodb一起使用。
REDIS會是您與會話聊天的臨時保存,因爲在計算機上執行磁盤寫/讀/查詢操作非常多(查看您的MongoDB),如果您打算保存每條消息的聊天記錄。這樣做MongoDb從長遠來看並不會縮小所有的井,並且不如REDIS那麼快。請注意,REDIS數據庫只能保存臨時聊天記錄,比如最近的一百萬次聊天會話或一些限制(全部在RAM中,因此大小是有限的,在一臺服務器上不能有太字節或數百GB的RAM)。
這樣的數據流會看起來像
- 用戶發送消息
- 服務器通過HTTP(S)後/ PUT接收訊息話題 - 阿賈克斯/可觀察
- 服務器將使用socket.io發射通過特定的密鑰/會話/消息將消息保存到REDIS的同時將消息發送給指定用戶。
- 指定用戶通過io事件獲取屏幕上的更新。
- 中間應該檢查REDIS數據庫是否已滿。如果它已滿,則刪除最後的10,000條非活動消息(如果服務器尚未滿足,可以從1年前開始)刪除一些空間。
將通話保存在手機中是一個好主意,因爲它可以節省用戶數據/帶寬,並且可以在離線時查看他們的留言。 一個解決方案是使用SQL Lite,它是一個輕量級庫,它將作爲一個數據庫坐在您的應用程序中,您可以對其執行查詢,如果您熟悉RDBMS,您將不會遇到實現它的問題。但是現在,您必須找到一種管理將數據保存到REDIS/SQL-LITE/MongoDb的好方法。