php - 在 iOS 聊天应用中刷新聊天消息
问题描述
我目前正在创建一个应用程序,其中 2 个用户将能够相互聊天。具体来说,它将是一个使用 Swift 作为主要语言的 iOS 应用程序。网络上的大多数聊天应用教程都推荐使用 Firebase,但我个人想使用 MySQL,因为我为这个应用程序的其余数据库活动都是使用 MySQL 完成的。我也不想使用任何现有的库,而是想自己做这一切。
我只对使用 MySQL 的效率有疑问。访问数据库时,我使用 swift 创建了一个 URLSession,然后使用指向后端 PHP 脚本的预定链接来处理数据库访问。唯一的问题是我的应用程序的聊天功能必须刷新消息(以查看其他用户在一秒钟左右发送给您的消息)。我很困惑如何去做。我目前的想法是有一个计时器,它每秒左右调用一次 URLSession 数据任务以从数据库中检索新消息,然后将它们显示在用户的屏幕上。这会有效还是有更好的方法来做到这一点?我觉得这似乎会以某种方式使 MySQL 陷入困境,并且总体上会降低数据库的效率。有没有更好的方法来解决这个问题?
提前致谢。
解决方案
如果您真的想使用 MYSQL 作为传递消息的一种方式,那么您可以查看@TekShock 关于使用 Apple 的PushNotifications
. 您也可以使用长轮询,但它一点也不有利。
我个人不会仅仅因为有更多更好的选择而使用 MYSQL 作为传递消息的方式。您可以从消息传递协议中进行选择,例如XMPP
和MQTT
传递您的消息。我个人MQTT
过去曾使用过,并认为它非常简单,可以完美满足您的需求。它有几个非常好的 Swift 客户端,比如SwiftMQTT。您将让每台设备订阅并发布到一个房间,以便它可以接收和发送消息。因此,在您的情况下,您可以User A
订阅ROOM 1
和User B
订阅同一个房间,他们都会收到发布到该特定房间的所有消息。
然后,如果您想将传递的消息存储到 MYSQL 数据库,那么当用户打开应用程序备份时,您可以加载他们以前的所有消息。您还可以使用Sqlite
或Realm
在本地存储这些消息,而不是在线存储它们。
编辑:
MQTT
如果这是您会考虑的事情,缩放也非常简单。您可以在您的应用程序和 MQTT 代理之间放置一个排队系统,这可能是您最好的选择,比如 Apache Kafka。
推荐阅读
- javascript - 在 onClick 中使用钩子
- python - For 循环仅保留 mongodb 的最后一个值用于 on_press 函数
- c++ - 控制台上不显示 \b 字符的输出
- ios - 将 xcode 升级到 10.2 版后面临 AFNetworking 错误
- sql-server - 想要使用 Powershell 将 Excel 文件直接批量插入 Azure 数据库
- unit-testing - 如何忽略 Jest 中的空测试文件引发错误
- c# - Query With Multi-Level Nested Arrays Using Linq
- python - TypeError:在“str”和“int”的实例之间不支持“>”以显示二进制中 1 的数量
- android - Gradle 失败:无法解决:删除 kotlintest 后的 io
- haskell - 为什么 Data.Bifunctor 中的“first”不转换这个值