1

我在 Php/Ratchet 中有一个可用的聊天服务器。我在 Swift 中使用Starscream作为我的客户。我成功创建了用户之间的聊天,但这仅在我的应用程序打开时才有效,因为这是在套接字打开时。即使我的应用未打开,如何让我的应用接收消息。所以基本上有办法让套接字保持打开状态。我在某处读到苹果禁止这样做。

4

3 回答 3

2

您的进程很可能会在某个时候被系统关闭,因此我不会依赖应用程序在后台处于活动状态。

  1. 尝试提出一个解决方案,以便在客户端上线时接收过去的消息。
  2. 阅读有关Apple 推送通知服务的信息,以便在应用程序未激活时通知您的用户有关消息。
于 2017-08-17T16:34:12.260 回答
1

听起来您正在从客户端向手机发送消息。您需要将消息发送到服务器,然后服务器将它们发送到您的手机。

如果服务器无法成功向您的手机发送消息,则应存储该消息并在手机可用时将存储的消息发送到该手机。

有这样的消息队列系统。例如,参见 RabbitMQ。还有很多其他的可能更适合您的技术堆栈。做一些研究。

这里客户端与服务器对话,服务器与 RabbitMQ 或您选择使用的任何东西连接,RabbitMQ 跟踪排队的消息,当电话上线时,RabbitMQ 将排队的消息发送到服务器,服务器将它们发送到电话。

PS谷歌“消息队列PHP”。

于 2017-08-17T22:46:55.223 回答
0

您需要与服务器同步。执行以下步骤。

  1. 转储数据库中的每条消息,即带有时间戳的双方对话。

  2. 当应用程序进入后台并进入前台时,刷新屏幕/本地阵列上的所有消息以在屏幕上显示消息,调用将获取整个对话的同步服务,因为服务器肯定会收到所有消息,为您提供屏幕有了这个服务响应。

iOS 系统将在内核级别接收套接字调用,但不会将这些消息传递给您的应用程序,因此当应用程序处于后台时您不会收到消息。

  1. 当应用程序被杀死时,您可以从苹果实现 APNS。
于 2020-10-14T14:59:42.793 回答