iOS聊天应用设计

时间:2016-05-26 22:44:31

标签: ios node.js mongodb chat

我使用socketsIO和节点后端在iOS上构建一个简单的聊天应用程序,以获得乐趣(以及获得经验的项目)。我试图找出最好的消息设计。我打算使用mongoDB数据库,其中每个会话都会存储其消息数据。只要客户端向服务器发送新消息,服务器就会将其添加到数据库中的相应对话中。

我还希望创建一个用户注册/登录系统,它会将您添加到数据库中。 但是,我已经搜索了很多内容,我真的不确定是否创建一个由会话组成的数据库(每当触发sentMessage事件时都会更新),用户数据是正确的方法。 另外,我看到有些人谈论在实际设备上保存聊天,而不是在数据库中?这样的聊天应用程序的常见设计模式是什么?

1 个答案:

答案 0 :(得分:1)

对于设计我也会使用socket.io来发送消息。它背后有一个很棒的社区,我也会使用MongoDb,因为一切都使用JSON格式,并且由于它使用JavaScript,它与Node集成得非常好。

现在您感兴趣的部分是REDIS。 Redis是一个位于网络RAM中的数据库,如果你要拥有更高的流量/需要快速/更少的挂机和等待,它应该与mongodb一起使用。

REDIS将是您与会话聊天的临时保存,因为在计算机上进行磁盘写入/读取/查询很多(查看MongoDB),如果您计划保存每条消息的聊天。这样做MongoDb从长远来看不会扩展所有井,并且不如REDIS快。请注意,REDIS数据库只会保存临时聊天记录,例如最后100万个聊天会话或一些限制(它全部在RAM中,因此大小有限,不能在1台服务器上拥有太字节或数百GB的RAM)。

因此数据流看起来像

  1. 用户发送消息
  2. 服务器通过HTTP(S)post / put接收消息 - Ajax / Observable
  3. 服务器将使用socket.io向指定用户发送消息,同时使用特定密钥/会话/消息将消息保存到REDIS。
  4. 指定用户通过io事件获取其屏幕上的更新。
  5. - 在中间应该检查REDIS数据库是否已满。如果它是完全删除最后10,000个非活动消息(可能是从1年前,如果服务器尚未完整),以留出一些空间。

    将聊天保存在手机上是一个好主意,因为它可以节省用户数据/带宽,并且他们可能会在离线时查看他们的消息。 一个解决方案是使用SQL Lite,这是一个轻量级的库,它将作为一个数据库放在你的应用程序中,你可以执行查询,如果你熟悉RDBMS你将没有问题实现它。但现在你必须找到一种管理REDIS / SQL-LITE / MongoDb保存数据的好方法。