截至2016年,Apple docs在這是陳舊的,不工作。例如,他們提到「保留」,但在XCode 7.1中默認使用ARC並且不支持「保留」。我在網上嘗試過各種示例,但都沒有成功。如何在OSX上對稱爲分佈式對象的IPC機制進行編碼,其中客戶機應用程序可以在服務器應用程序上調用類方法(例如,特別是在LaunchDaemon中構成的,但不是必需的)?如何使用Objective C在OSX上執行分佈式對象?
1
A
回答
3
這裏有一個代碼示例讓你去。 server.mm項目最好是將其加載到LaunchDaemon中。我以root用戶的身份運行了一些測試,並確保以「mike」運行的客戶端應用程序以「root」身份運行守護程序中的代碼。所以,它可以啓用特權提升。請注意,此IPC不提供任何協議加密或認證挑戰 - 所以,您自己決定添加。您可能可以使用AES256 + Base64編碼加密的密鑰/列表,XML或JSON消息,並在發送和接收時使用一個長而艱難的密碼短語。請記住,在特權提升的情況下,您必須實施一些保護機制。
首先啓動服務器,它將坐在那裏等待連接。接下來啓動客戶端,它將建立連接,將數據傳遞給樣本類方法,等待並接收消息,然後顯示並關閉。服務器還會顯示連接已完成,以及在發送響應之前服務器上收到的內容。
請注意,這是一個同步示例,這意味着您調用類方法並等待響應。如果您希望它是異步的,那麼您應該閱讀oneway
keyword上的Apple文檔。你把它放在類方法聲明中的客戶端和服務器端。請注意,關鍵字oneway
實際上最適用於返回void的類方法,因爲您無法獲得對異步類方法的響應。因此,您需要進行異步調用來啓動任務,然後使用同步調用來獲取您啓動的任務的狀態更新。所以,這裏的是將有oneway
關鍵字類方法聲明的例子說:
- (oneway void)runTaskAsync:(NSString *)sParam;
而現在,代碼...
server.m
#import <Foundation/Foundation.h>
#define cat stringByAppendingString
@interface MyService : NSObject {
NSConnection *connection;
}
@end
@implementation MyService
- (NSString *)testResponse:(NSString *)s {
NSLog(@"...connection:%@", s);
s = [s cat:@"-response"];
return s;
}
- (void)runService {
connection = [[NSConnection alloc] init];
[connection setRootObject:self];
[connection registerName:@"com.acme.myservice"];
[[NSRunLoop currentRunLoop] run];
}
@end
int main (int argc, const char *argv[]) {
@autoreleasepool {
NSLog(@"ACME MyService 1.0\n");
MyService *svc = [[MyService alloc] init];
[svc runService];
}
return 0;
}
client.m
#import <Foundation/Foundation.h>
int main (int argc, const char *argv[]) {
@autoreleasepool {
NSLog(@"building proxy object");
id proxy = [NSConnection rootProxyForConnectionWithRegisteredName:@"com.acme.myservice" host:nil];
NSLog(@"calling test response thru proxy object");
NSString *sResult = [proxy testResponse:@"sent"];
NSLog(@"RESULT=%@", sResult);
}
return 0;
}
相關問題
- 1. 在Objective-C中分組對象Objective-C
- 2. 如何在Objective-C中使用分佈式對象(DO)時確定調用對象?
- 3. 分組對象在Objective-C
- 4. Cocoa/Objective-C和分佈式對象的例子?
- 5. 分離Objective-C接口對象和執行
- 6. 在對象上使用.map()不會在分片上執行
- 7. 分配了Objective-C對象
- 8. 如何在C++中使用自定義的Objective-C對象?
- 9. 如何在Objective-C中填充分數矩陣(用於執行序列比對)
- 10. 在Mac OSX上運行分佈式處理的最佳方法
- 11. 的Objective-C +發行對象
- 12. 在Objective-C++中沒有發佈的對象使用ARC
- 13. 在NSDictionary中使用objective-c對象
- 14. 在Objective-C對象中使用malloc/free
- 15. 如何在iOS上啓用新的Objective-C對象文字?
- 16. NSPortTimeoutException使用分佈式對象時
- 17. OSX - 如何調試分佈式構建?
- 18. 如何對象寫入JSON在Objective-C
- 19. 如何在OSX上使用Java執行全屏
- 20. 分佈式同步執行
- 21. 發佈Objective-C對象與ARC數組C對象
- 22. Objective-c要發佈的IBOutlet對象?
- 23. 使用Objective-C分佈式對象進行內存管理:我的臨時實例永遠活着!
- 24. 如何在OSX上使用C++在C++中使用CGEventPost?
- 25. 如何在Objective-C函數中返回新分配的對象?
- 26. 如何在Objective-C中使用本地靜態對象?
- 27. 如何在Objective C中使用NSData創建json對象?
- 28. 如何在包含圖像的NSMutableArray上執行NSUndoManager?(Objective-C)
- 29. 如何在iPhone上執行HTML文件(Objective C)?
- 30. 分佈式對象崩潰
這不需要是Objective-C++,據我所知它不使用任何C++特性。 – tbodt