在 Swift 中为聊天应用程序保持套接字打开

Keeping socket open in Swift for chat application

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

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

  1. 尝试想出一个在客户端上线时接收过去消息的解决方案。
  2. 阅读有关 Apple Push Notification Service 的信息,以在应用未激活时通知您的用户消息。

听起来您正在将消息从您的客户端发送到您的 phone。您需要将消息发送到服务器,服务器将它们发送到您的 phone.

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

像这样的事情有消息队列系统。参见,例如,RabbitMQ。还有很多其他方法可能会更好地与您的技术栈配合使用。做一些研究。

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

PS Google "message queue PHP".

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

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

  2. 当应用程序进入后台并进入前台时,刷新 screen/local 数组中的所有消息以在屏幕上显示消息,调用同步服务以获取整个对话,因为服务器肯定会收到所有消息,所以请在屏幕上显示此服务响应。

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

  1. 当应用程序被终止时,您可以从苹果实施 APNS。