我正在开发一个使用 CocoaHTTPServer 进行远程服务器通信的 iPhone 应用程序。
该应用程序会将请求详细信息发送到 CocoaHTTPServer,后者将在本地存储请求。一旦互联网连接可用,CocoaHTTPServer 会将请求发送到远程服务器并获得服务器响应,现在 CocoaHTTPServer 必须将此响应发送回应用程序,
但我很困惑如何实现它。是否有相同的应用程序间通信api?
非常感谢任何建议。
我正在开发一个使用 CocoaHTTPServer 进行远程服务器通信的 iPhone 应用程序。
该应用程序会将请求详细信息发送到 CocoaHTTPServer,后者将在本地存储请求。一旦互联网连接可用,CocoaHTTPServer 会将请求发送到远程服务器并获得服务器响应,现在 CocoaHTTPServer 必须将此响应发送回应用程序,
但我很困惑如何实现它。是否有相同的应用程序间通信api?
非常感谢任何建议。
好吧,我没有解决 CocoaHTTP 服务器类,所以不能很好地解释你,但我发现有几个教程会很好地指导你。
感谢 Matt Gallagher提供了如此详细的文章。
您可以使用 NSFileHandle 类监听连接
listeningHandle = [[NSFileHandle alloc]
initWithFileDescriptor:fileDescriptor
closeOnDealloc:YES];
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(receiveIncomingConnectionNotification:)
name:NSFileHandleConnectionAcceptedNotification
object:nil];
[listeningHandle acceptConnectionInBackgroundAndNotify];
当 receiveIncomingConnectionNotification: 被调用时,每个新的传入连接都会得到它自己的 NSFileHandle。如果您正在跟踪,您可以处理收到的消息
if(CFHTTPMessageIsHeaderComplete(incomingRequest))
{
HTTPResponseHandler *handler =
[HTTPResponseHandler
handlerForRequest:incomingRequest
fileHandle:incomingFileHandle
server:self];
[responseHandlers addObject:handler];
[self stopReceivingForFileHandle:incomingFileHandle close:NO];
[handler startResponse];
return;
}
注意:请阅读全文,它有很好的解释。
除此之外,您可能还对此有所了解。
希望这会给你一些想法。
您的问题集中在背景过程上。
当应用程序进入后台时,完成任务的时间非常有限。之后,应用程序在后台冻结。这不是开始沟通的好情况。
苹果明确表示,优先级始终是正在运行的前台任务。
通知机制(如上面的 RDC 所列)是为处理外部事件而创建的。在这样的唤醒期间,您可以发送/接收一点数据,但是您将获得最低优先级。由于时间在沟通中很重要,我也不会这样做。
我建议在叫醒电话期间检查通信,然后开始活动。并使用 Notification 机制唤醒用户,该网络再次启动。
URL 方案可用于将响应发送回应用程序。来自远程服务器的响应可以设置为 URL 中的参数。CocoaHTTPServer 可以调用另一个应用程序,该应用程序将成为这个唯一 URL 的处理程序。以下链接提供了更多相关信息。