首页 > 解决方案 > 在 iOS 聊天应用中刷新聊天消息

问题描述

我目前正在创建一个应用程序,其中 2 个用户将能够相互聊天。具体来说,它将是一个使用 Swift 作为主要语言的 iOS 应用程序。网络上的大多数聊天应用教程都推荐使用 Firebase,但我个人想使用 MySQL,因为我为这个应用程序的其余数据库活动都是使用 MySQL 完成的。我也不想使用任何现有的库,而是想自己做这一切。

我只对使用 MySQL 的效率有疑问。访问数据库时,我使用 swift 创建了一个 URLSession,然后使用指向后端 PHP 脚本的预定链接来处理数据库访问。唯一的问题是我的应用程序的聊天功能必须刷新消息(以查看其他用户在一秒钟左右发送给您的消息)。我很困惑如何去做。我目前的想法是有一个计时器,它每秒左右调用一次 URLSession 数据任务以从数据库中检索新消息,然后将它们显示在用户的屏幕上。这会有效还是有更好的方法来做到这一点?我觉得这似乎会以某种方式使 MySQL 陷入困境,并且总体上会降低数据库的效率。有没有更好的方法来解决这个问题?

提前致谢。

标签: phpiosmysqlsqlswift

解决方案


如果您真的想使用 MYSQL 作为传递消息的一种方式,那么您可以查看@TekShock 关于使用 Apple 的PushNotifications. 您也可以使用长轮询,但它一点也不有利。

我个人不会仅仅因为有更多更好的选择而使用 MYSQL 作为传递消息的方式。您可以从消息传递协议中进行选择,例如XMPPMQTT传递您的消息。我个人MQTT过去曾使用过,并认为它非常简单,可以完美满足您的需求。它有几个非常好的 Swift 客户端,比如SwiftMQTT。您将让每台设备订阅并发布到一个房间,以便它可以接收和发送消息。因此,在您的情况下,您可以User A订阅ROOM 1User B订阅同一个房间,他们都会收到发布到该特定房间的所有消息。

然后,如果您想将传递的消息存储到 MYSQL 数据库,那么当用户打开应用程序备份时,您可以加载他们以前的所有消息。您还可以使用SqliteRealm在本地存储这些消息,而不是在线存储它们。

编辑:

MQTT如果这是您会考虑的事情,缩放也非常简单。您可以在您的应用程序和 MQTT 代理之间放置一个排队系统,这可能是您最好的选择,比如 Apache Kafka。


推荐阅读