2010-04-15 3 views
2

프로세스 간 통신에 NSConnection/NSDistributedObject를 사용하고 싶습니다. 나는 클라이언트가 서버가 가끔씩 만 도달 할 수있는 경우를 처리 할 수 ​​있기를 바란다.NSConnection 실패 감지/복구

NSConnection에 메시지를 보내지 못했거나 실패했는지 어떻게 알 수 있습니까? 현재 내 서버 (원격 객체를 판매 한 프로세스)가 종료 된 경우 클라이언트는 원격 객체에 선택기를 전송하면이 충돌합니다.

이상하게도 연결을 인스턴스화 (또는 인스턴스 다시 작성) 할 수있는 원격 객체에 대한 래퍼를 갖고 싶습니다. 연결을 인스턴스화 할 수 없거나 연결에 실패한 경우 기본값을 반환하십시오. 나는 객관적인 c를 사용하여 이것을하는 올바른 방법을 정말로 모른다. 연결이 경우 원격 객체를 "물어"할 신뢰할 수있는 방법이 없기 때문에, 불행하게도

if myConnection is null: 
    instantiate myConnection 
    if MyConnection is null: 
     return defaultValue 

    try 
     return [myConnection someMethod] 
    catch 
     myConnection = null 
     return defaultValue 

답변

2

예외 처리기를 사용하는 연결 실패를 감지 할 수있는 유일한 방법입니다 :

다음은이 논리를 나타내는 일부 의사입니다 여전히 유효합니다. 다행히, 이것은 간단하다 : 서버가 다음 정상적으로 quiting됩니다

//get the distributed object 
id <YourDOProtocol> remoteObject = (id <YourDOProtocol>)[NSConnection rootProxyForConnectionWithRegisteredName:@"YourRegisteredName" host:yourHost]; 

//call a method on the distributed object 
@try 
{ 
    NSString* response = [remoteObject responseMethod]; 
    //do something with response 
} 
@catch(NSException* e) 
{ 
    //the receiver is invalid, which occurs if the connection cannot be made 
    //handle error here 
} 
0

경우, 나는 그것이 연결의로는 NSConnectionDidDieNotification을 게시거야, 이해의이야 닫히고 그래서 당신은 다음과 같은 클라이언트를 등록 할 수 있습니다 :

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(connectionDidDie:) name:NSConnectionDidDieNotification object:remoteObject]; 

아마도 connectionDidDie: 메서드는 메시지 보내기를 시도하기 전에 확인할 수있는 Boolean var를 설정할 수 있습니다.

귀하의 DO는 시작되었음을 알릴 수있는 알림을 게시 할 수 있습니다 (시스템 메시지가 있지만 DO에 대해 배우기 시작한 것 같지만). 귀하는 마찬가지로 시작 알림을 받기 위해 등록 할 수 있습니다.

Rob의 답변은 확실한 '포괄적 인'것이며 내게 알려지지 않은 알림 센터에 대해 걱정할 필요가 없습니다.

저는 첫 번째 DO 응용 프로그램에서 '죽었습니까'라는 알림을 사용하여 도움이 되었기를 바랍니다.

토드.