我正在开发一个内部iOS应用程序,它需要HTTP服务器一直在运行。
为此,我使用后台任务使应用程序保持活动状态(在后台播放音频),然后启动HTTP服务器。这是我AppDelegate
的代码。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
bgTask = [[MyBackgroundTask alloc] init];
[bgTask startBackgroundTaskWithTarget:self selector:@selector(backgroundCallback:)];
httpServer = [[HTTPServer alloc] init];
httpServer.interface = @"localhost";
[httpServer setType:@"_http._tcp."];
[httpServer setPort:8080];
[httpServer start];
}
它完美无缺......几乎!
有时候,应用程序在后台运行时会被杀死。例如:
Jun 24 11:27:24 My-iPhone SpringBoard[43] <Warning>: Application 'UIKitApplication:com.test.MyApp[0x668d]' was killed by jetsam.
并且显然 HTTP服务器出现故障。但是当我在终止后重新启动应用程序时,HTTP服务器将无法启动! (当我在Safari中键入localhost:8080
时,我看到一条错误消息。)
我没有终止问题,这完全没问题。但是当我重新打开应用程序时,我希望我的HTTP服务器启动并运行。但为什么不发生呢?
(请注意,如果我自己关闭应用程序,一切正常)。
答案 0 :(得分:0)
也许:
的任何其他原因准备好处理基于网络的套接字中的连接失败。当您的应用程序因任何原因被暂停时,系统可能会拆除套接字连接。只要您的基于套接字的代码为其他类型的网络故障(例如丢失信号或网络转换)做好准备,这不会导致任何异常问题。当您的应用程序恢复时,如果在使用套接字时遇到故障,只需重新建立连接即可。