【问题标题】:iOS: How to keep TCP socket and the NSNetService working when the App is in the backgroundiOS:当应用程序在后台时,如何保持 TCP 套接字和 NSNetService 工作
【发布时间】:2015-08-04 17:32:27
【问题描述】:

我正在使用 GCDAsyncSocket、GCDAsyncUdpSocket 和 NSNetService 做一个 P2P VoIP 应用程序,以在网络上使用该应用程序查找其他设备。 我有一个 TCP 套接字来传输用户数据并协商 UDP 连接。

我需要保持 NSNetService 服务在应用程序处于后台时发布 Bonjour,并保持一个打开的套接字以接收来自其他设备的请求。

按下 iPhone 的 HOME 键,socket 不断开但不响应,只有在应用重新打开时才会向应用发送数据。通过阻塞屏幕,套接字被关闭。

应用程序关闭时要发布的 NSNetService。

我激活了后台 VoIP App、音频等选项。

我用过

 [ asyncSocket performBlock : ^ {
        [ asyncSocket enableBackgroundingOnSocket ];
    }];

有人知道如何在 iPhone 锁定时保持 Socket 和 NSNetService 正常工作吗?

【问题讨论】:

    标签: ios background-process voip gcdasyncsocket nsnetservice


    【解决方案1】:

    我将我认为重要的部分加粗。

    来自苹果:https://developer.apple.com/library/ios/technotes/tn2277/_index.html#//apple_ref/doc/uid/DTS40010841-CH1-SUBSECTION15

    VoIP 套接字 VoIP(IP 语音)应用程序应持续运行,以便监控 VoIP 控制连接;但是,为了最大程度地减少对系统的内存影响,应用程序在处于非活动状态时会被挂起。 要完成这项工作,应用程序必须将其控制连接的数据套接字注册为 VoIP 套接字。以这种方式注册的套接字有两个特殊功能:

    当应用程序暂停时,系统会代表应用程序监控套接字。如果任何数据到达套接字,系统会恢复应用程序的执行(尽管在后台),然后应用程序可以从套接字读取数据并采取适当的措施(例如,通知用户有来电)。 套接字的资源永远不会被回收。因此,应用程序可以安全地挂起,而不必担心其套接字会失聪。 有关如何创建 VoIP 应用程序的更多信息,请参阅 iOS 应用程序编程指南。

    你也可以参考这个:How to Maintain VOIP socket connection in background?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      • 1970-01-01
      • 2017-08-07
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多