iOS 聊天应用程序设计

Posted

技术标签:

【中文标题】iOS 聊天应用程序设计【英文标题】:iOS chat app design 【发布时间】:2016-05-26 22:44:31 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

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

REDIS 将是您与会话聊天的临时保存,因为在机器上进行磁盘写入/读取/查询的工作量很大(看看您的 MongoDB),如果您打算保存每条消息的聊天。从长远来看,这样做 MongoDb 并不能很好地扩展,也没有 REDIS 快。请注意,REDIS 数据库只会保存最近 100 万次聊天会话或某个限制的临时聊天日志(它都在 RAM 中,因此大小受到限制,一台服务器上不能有 TB 或数百 GB 的 RAM)。

所以数据流看起来像

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

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

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

【讨论】:

以上是关于iOS 聊天应用程序设计的主要内容,如果未能解决你的问题,请参考以下文章

通过 Socket.IO 的 WebSocket 设计模式

聊天系统Vue.jsReact.jsnode.jsMongoDBwebsocketsocket.io前后端分离毕

Java网络编程系列之基于BIO的多人聊天室设计与实现

iOS移动架构设计

iOS移动架构设计FWZ

C++语言实现网络聊天程序的设计与实现(基于TCP/IP协议的SOCKET编程)超详细(代码+解析)