2016-05-26 153 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的好方法。