刷新iOS聊天应用中的聊天消息

时间:2018-05-16 21:50:38

标签: php ios mysql sql swift

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

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

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果您真的想使用MYSQL作为传递信息的方式,那么您可以查看@ TekShock关于使用Apple PushNotifications的评论。您也可以使用Long Polling,但它根本不利。

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

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

编辑:

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