Objective-C / CocoaHTTPServer - 是否可以返回对应用程序的响应?

时间:2014-09-02 13:37:40

标签: ios objective-c cocoahttpserver

我正在开发一个使用CocoaHTTPServer进行远程服务器通信的iPhone应用程序。

应用程序会将请求详细信息发送到CocoaHTTPServer,CocoaHTTPServer将在本地存储请求。一旦互联网连接可用,CocoaHTTPServer就会将请求发送到远程服务器&现在将获得服务器响应CocoaHTTPServer必须将此响应发送回应用程序,

但我很困惑如何实现它。是否有相同的应用程序间通信api?

非常感谢任何建议。

3 个答案:

答案 0 :(得分:1)

好吧,我还没有解决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;
}

注意:请仔细阅读完整的文章,它有很好的解释。

除此之外,您也可以查看this

希望这会给你一些想法。

答案 1 :(得分:1)

你的问题是关注背景过程。

当应用程序进入后台时,完成任务的时间非常有限。之后,应用程序冻结在后台。这不是开始沟通的好情况。

Apple明确指出优先级总是在正在运行的前台任务上。

创建通知机制(由上面的RDC列出)来处理外部事件。在这样的唤醒期间,您可以发送/接收一些数据,但是您将获得最低优先级。由于时间安排在沟通中很重要,我也不会这样做。

我建议在唤醒呼叫期间检查通信,然后开始活动。并使用通知机制唤醒用户,该网络再次启动。

答案 2 :(得分:1)

URL方案可用于将响应发送回应用程序。可以将远程服务器的响应设置为URL中的参数。 CocoaHTTPServer可以调用另一个应用程序,该应用程序将成为此唯一URL的处理程序。以下链接提供了相同的更多信息。

Inter-AppCommunication using URL scheme