如何在ios中可靠地保持voip应用程序的活动?

如何在ios中可靠地保持voip应用程序的活动?,ios,node.js,sockets,cocoa-touch,ios8,Ios,Node.js,Sockets,Cocoa Touch,Ios8,我有一个基于webrtc的ios voip应用程序。我还有一个用nodejs制作的信令服务器。我可以毫无问题地连接到服务器并拨打电话。但准确跟踪(在线/离线)状态是一个问题 为了记录在案,这里列出了我为确保稳定连接所做的一切: 设置背景模式“IP语音” 使用“[inputstream setProperty:NSStreamNetworkServiceTypeVoIP”将inputstream标记为voip流 forKey:NSStreamNetworkServiceType];“ 通过在pli

我有一个基于webrtc的ios voip应用程序。我还有一个用nodejs制作的信令服务器。我可以毫无问题地连接到服务器并拨打电话。但准确跟踪(在线/离线)状态是一个问题

为了记录在案,这里列出了我为确保稳定连接所做的一切:

  • 设置背景模式“IP语音”
  • 使用“[inputstream setProperty:NSStreamNetworkServiceTypeVoIP”将inputstream标记为voip流 forKey:NSStreamNetworkServiceType];“
  • 通过在plist文件中将“UIRequiresPersistentWiFi”设置为“是”,打开持久wifi
  • 我实现了“setKeepAliveTimeout:handler:”并使用它向服务器发送ping(不必要,但您永远不知道…)
  • 我创建了一个小的测试应用程序,它只不过是连接到服务器并用消息“pong”响应“ping”。当keep-alive超时处理程序启动且服务器回复为“pong”时,此应用程序向服务器发送“ping”。我还创建了一个简单的测试服务器,它只允许客户端连接,当我通过telnet向客户端发送“send_ping”时向客户端发送“ping”,并用消息“pong”响应“ping”

    我所期望的是:

    • 启动应用程序并登录应创建到服务器的持久连接(works)

    • 远程登录到服务器并键入send_ping使服务器向客户端发送“ping”,客户端应将“pong”发送回(工作)

    • 将设备置于待机状态不应对上述乒乓机制产生影响(不工作)

    • 将设备置于待机状态并在几个小时后解锁,然后向其发送ping应该会使客户端发回一个pong(正常工作)

    • 应在服务器端检测到关闭客户端的wifi(未启用手机)并关闭插座(不工作)

    我将来自服务器的所有消息记录在带有时间戳的客户端的文本视图中,有时当我将设备置于待机状态时,我从服务器发送的ping根本不会到达。有时应用程序需要一分钟才能收到ping消息,有时它会立即响应。我不明白为什么它如此随机。有时,这种不希望出现的行为在待机状态下仅几分钟后就开始了,有时会正常运行一段时间,但在20多分钟后就会中断,有时,一旦我解锁设备,来自服务器的所有消息就会立即到达


    推送通知和voip推送通知可能是一种解决方案,但它们也有点不可靠。应该有一种方法可以让它在100%的时间内工作。

    最后,你采用了什么方法?@Sandy我们仍然没有一个100%工作的解决方案,但我们发现了一些有用的东西。首先,CentOS在我们的连接中断中起到了一定作用,将node.js服务器移动到Windows主机解决了80%的问题。我们现在使用voip推送来覆盖最后一点,现在几乎完美了。