[英]NSSocketPortNameServer portForName:host: slow on Mavericks
現在,使用Mavericks [NSSocketPortNameServer portForName:host:]
大約需要5秒鍾才能解析本地主機。 過去速度要快得多,大約為0.01秒。
我的代碼與Apple的《分布式對象簡介 》中的代碼相同。
我曾經能夠在不到0.1秒的時間內啟動子進程並連接到該子進程。 我的文件管理器運行多個子進程,因此,在Mavericks上該文件管理器已不存在。 該應用程序未沙盒化。
我不明白為什么[NSSocketPortNameServer portForName:host:]
花這么長時間。 也許我做錯了。
任何建議,不勝感激?
運行大約需要0.1秒。
NSSocketPort* port = [[NSSocketPort alloc] init];
NSConnection* connection = [NSConnection connectionWithReceivePort:port sendPort:nil];
[[NSSocketPortNameServer sharedInstance] registerPort:port name:@"doug"];
小牛需要5秒。
過去在Mountain Lion和Lion上大約需要0.1秒。
NSPort* port = [[NSSocketPortNameServer sharedInstance] portForName:@"doug" host:@"*"];
NSConnection* connection = [NSConnection connectionWithReceivePort:nil sendPort:port];
我也嘗試使用nil
,例如[[NSSocketPortNameServer sharedInstance] portForName:name host:nil]
。 沒關系。
如果我使連接無效並嘗試再次連接,則[[NSSocketPortNameServer sharedInstance] portForName:name host:nil]
也需要5秒鍾。
當我使用scutil --dns
轉儲DNS配置時,我看到本地域有5秒的超時。 我懷疑此超時設置為小牛之前的0秒。 我不能要求所有用戶重置此超時,因此我將繼續研究對Mavericks采取的措施以避免此超時。
終於解決了。
我最終放棄了-portForName:host:
而是通過命令-portForName:host:
端口號傳遞給了子進程。
子進程以這種方式聯系父進程:
int port = /* parent process' port number passed via command line */
NSSocketPort *port = [[NSSocketPort alloc] initRemoteWithTCPPort:port host:nil];
NSConnection* connection = [NSConnection connectionWithReceivePort:nil sendPort:port];
子進程通過命令行從父進程獲取端口號。 父進程通過此類別找到自己的端口號。
@implementation NSSocketPort (ObtainPortNumber)
-(int)portNumber {
NSSocketNativeHandle sock = [self socket];
NSData *address = self.address;
if ([address length] != sizeof(struct sockaddr_in)) {
NSLog(@"NSSocketPort (ObtainPortNumber) - Mismatch size of address vs size of sockaddr_in.");
return -1;
}
struct sockaddr_in addr = *((struct sockaddr_in*)[address bytes]);
socklen_t len = sizeof(addr);
if (getsockname(sock, (struct sockaddr *)&addr, &len) == -1) {
NSLog(@"NSSocketPort (ObtainPortNumber) - getsockname failed.");
return -1;
}
int portNumber = ntohs(addr.sin_port);
return portNumber;
}
@end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.