iOS聊天应用程序设计

标签 ios node.js mongodb chat

我正在 iOS 上使用 socketsIO 和 Node 后端构建一个简单的聊天应用程序(并从中获得经验的项目)。我正在尝试找出最好的消息设计。我计划使用 mongoDB 数据库,其中每个对话都会存储其消息数据。每当客户端向服务器发送新消息时,服务器都会将其添加到数据库中相应的对话中。

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

最佳答案

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

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

REDIS 将是您与 session 聊天的临时保存,因为在机器上执行磁盘写入/读取/查询很多(看看您的 MongoDB),如果您计划保存每条消息的聊天。从长远来看,这样做 MongoDb 无法很好地扩展,并且速度不如 REDIS。请注意,REDIS 数据库将只保存临时聊天记录,比如最近 100 万个聊天 session 或某个限制(全部在 RAM 中,因此大小有限,一台服务器上不能有 TB 或数百 GB 的 RAM)。

所以数据流看起来像

  1. 用户发送消息
  2. 服务器通过 HTTP(S) post/put 接收消息 - Ajax/Observable
  3. 服务器将使用 socket.io 向指定用户发送消息,同时使用特定键/ session /消息将消息保存到 REDIS。
  4. 指定用户通过 io 事件在屏幕上获取更新。

-- 中间应该检查 REDIS 数据库是否已满。如果已满,请删除最后 10,000 条非事件消息(如果服务器尚未满,则可能是 1 年前的消息)以腾出一些空间。

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

关于iOS聊天应用程序设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37472240/

相关文章:

objective-c - 为什么在我对自定义的 UIViewController 进行子类化时无法访问变量?

ios - 在 Menu() 中使用多个 if 条件

javascript - 如何在 Mongoose/Mongodb 中创建查询以获取此 json?

javascript - 保持 Node js 函数运行而不使用前端的任何调用

node.js - 如何在查询另一个模型后添加虚拟字段

ios - 如何使用HomeKit框架从配件向iOS设备发送通知

ios - adWhirl 的 actualadsize 方法没有返回正确的信息

Mongodb 查询不在带有文本字段的复合索引上使用前缀

javascript - 仅从脚本标签中提取 javascript

node.js - 如何在node.js中验证 Mongoose 连接mongodb