Objective-C/CocoaHTTPServer - 是不是可以向应用程序返回响应?

Posted

技术标签:

【中文标题】Objective-C/CocoaHTTPServer - 是不是可以向应用程序返回响应?【英文标题】:Objective-C/CocoaHTTPServer - Is it possible to return response to the app?Objective-C/CocoaHTTPServer - 是否可以向应用程序返回响应? 【发布时间】:2014-09-02 13:37:40 【问题描述】:

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

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

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

非常感谢任何建议。

【问题讨论】:

@RDC ,这将交给 Ram,谁能指导你 如果应用将自己声明为唯一类型 URL 的处理程序,并且您知道可以使用其参数打开 URL 的格式。 @uchuugaka 但是后台应用程序是否有可能打开一个 URL 并最终调用另一个应用程序? 最好的方法是尝试一下,但如果我没记错的话,应该是用户发起的切换应用程序的事件...... ios 8 可能会为您提供新的东西,不确定。 【参考方案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。

希望这能给你一些想法。

【讨论】:

【参考方案2】:

您的问题集中在后台进程。

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

Apple 明确声明优先级始终在正在运行的前台任务上。

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

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

【讨论】:

【参考方案3】:

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

Inter-AppCommunication using URL scheme

【讨论】:

以上是关于Objective-C/CocoaHTTPServer - 是不是可以向应用程序返回响应?的主要内容,如果未能解决你的问题,请参考以下文章