【发布时间】:2018-01-26 04:23:36
【问题描述】:
我在 Php/Ratchet 中有一个可用的聊天服务器。我在 Swift 中使用 Starscream 作为我的客户。我成功地在用户之间创建了一个聊天,但这仅在我的应用程序打开时才有效,因为这是在套接字打开的时候。即使我的应用未打开,如何让我的应用接收消息。所以基本上有办法让套接字保持打开状态。我在某处读到苹果禁止这样做。
【问题讨论】:
标签: php swift sockets websocket starscream
我在 Php/Ratchet 中有一个可用的聊天服务器。我在 Swift 中使用 Starscream 作为我的客户。我成功地在用户之间创建了一个聊天,但这仅在我的应用程序打开时才有效,因为这是在套接字打开的时候。即使我的应用未打开,如何让我的应用接收消息。所以基本上有办法让套接字保持打开状态。我在某处读到苹果禁止这样做。
【问题讨论】:
标签: php swift sockets websocket starscream
您需要与服务器同步。执行以下步骤。
转储数据库中的每条消息,即带有时间戳的双方对话。
当应用程序进入后台并进入前台时,刷新屏幕/本地数组上的所有消息以在屏幕上显示消息,调用将获取整个对话的同步服务,因为服务器肯定会收到所有消息,将此服务响应提供给您的屏幕。
iOS 系统将在内核级别接收套接字调用,但不会将这些消息传递给您的应用,因此当应用处于后台时您不会收到消息。
【讨论】:
听起来您正在从客户端向您的手机发送消息。您需要将消息发送到服务器,服务器将它们发送到您的手机。
如果服务器无法成功向您的手机发送消息,则应存储该消息,并应在手机可用时将存储的消息发送到该手机。
有这样的消息队列系统。例如,参见 RabbitMQ。还有很多其他的可能更适合您的技术堆栈。做一些研究。
这里客户端与服务器通信,服务器与 RabbitMQ 或您选择使用的任何东西连接,RabbitMQ 跟踪排队的消息,当手机上线时,RabbitMQ 将排队的消息发送到服务器,服务器发送他们到手机上。
PS Google“消息队列 PHP”。
【讨论】:
您的进程很有可能会在某个时候被系统关闭,因此我不会依赖应用程序在后台处于活动状态。
【讨论】: