2014-09-02 61 views
2

我正在开发一个使用CocoaHTTPServer进行远程服务器通信的iPhone应用程序。Objective-C/CocoaHTTPServer - 是否可以返回应用程序?

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

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

任何建议,非常感谢。

+0

@RDC,这将去RAM,谁可以指导你 – 2014-09-03 06:49:11

+0

如果应用程序声明自己作为处理程序的唯一URL类型的,你知道你可以用它的参数打开URL格式。 – uchuugaka 2014-09-04 13:59:37

+0

@uchuugaka但后台应用程序可能会打开一个URL,并最终调用另一个应用程序? – 2014-09-04 14:17:25

回答

1

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

Inter-AppCommunication using URL scheme

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

你的问题是关注于后台进程。

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

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

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

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

相关问题