Не забывайте отменять Ваш Добрый день решение
Q: После того, как я Разрешаю службу Bonjour для получения ее IP-адресов, я должен отменить операцию Resolve?
A: После того, как я Разрешаю службу Bonjour для получения ее IP-адресов, я должен отменить операцию Resolve?
Да. Отъезд выполнения операции Resolve помещает ненужную нагрузку в сеть, потому что Вы заканчиваете тем, что отправляли пакеты запроса каждые несколько минут для хранения ресурсных записей DNS актуальными в локальной машине Добрый день кэш. Необходимо только Разрешить службу в данный момент, необходимо соединиться с нею, и необходимо сразу отменить Решение после успешного соединения со службой. Вручную остановка Решения также содержит для любого разрешения, включающего схему тайм-аута. Запускаясь в Mac OS X 10.3, отказ отменить Решение заставит следующее сообщение появляться в системном журнале (/var/log/system.log).
Перечисление 1 system.log сообщение
Oct 11 12:57:54 admin mDNSResponder[266]: 37755: DNSServiceResolver(Ice Cube._http._tcp.local.) has remained active for over two minutes. This places considerable burden on the network. |
Процесс, которым Вы отменяете работу (ы) Resolve, зависит от метода, который Вы используете.
Если Вы используете
DNSServiceResolve, необходимо вызватьDNSServiceRefDeallocate.Если Вы используете
CFNetServiceResolveилиCFNetServiceResolveWithTimeout, необходимо выполнить следующие вызовы:Перечисление 2 отмена CFNetServiceResolve
CFNetServiceSetClient(netService, NULL, NULL); CFNetServiceUnscheduleFromRunLoop(netService, runLoop, runLoopMode); CFNetServiceCancel(netService); CFRelease(netService);
Если Вы используете
NSNetService, необходимо выполнить следующие вызовы:Перечисление 3 отмена NSNetService
[NSNetService stop]; [NSNetService release];
Или можно использовать [NSNetService resolveWithTimeout:] и указывают интервал тайм-аута. Пример необходимых вызовов выглядел бы подобным следующему:
Перечисление 4 пример тайм-аута NSNetService
if ([someNetServiceInstance respondsToSelector:@selector(resolveWithTimeout:)]) { // Mac OS X 10.4 "Tiger" or later [someNetServiceInstance resolveWithTimeout:20]; } else { // Mac OS X 10.3 "Panther" or earlier [someNetServiceInstance resolve]; NSTimer * stopTimer = [NSTimer timerWithTimeInterval:20 target:someNetServiceInstance selector:@selector(stop) userInfo:nil repeats:NO]; [[NSRunLoop currentRunLoop] addTimer:stopTimer forMode:NSDefaultRunLoopMode]; }
Существуют некоторые редкие приложения, которые должны поддерживать в порядке Решение, работающее для контроля для изменений записи TXT. iChat, например, постоянно контролирует для изменений в сообщении о состоянии приятеля, которое сохранено в Добрый день запись TXT. Если Ваше приложение требует этого типа функциональности, запускающийся в Mac OS X 10.4 можно теперь контролировать для использования записей TXT CFNetServiceMonitor и/или [NSNetService startMonitoring]. Если Вы хотите, чтобы Ваше приложение поддерживало Mac OS X 10.3, используют DNSServiceDiscovery APIs, расположенный в /usr/include/dns_sd.h.
История версии документа
| Дата | Примечания |
|---|---|
| 30.08.2007 | Снятый неоднозначность язык, передающий отмену тайм-аута. |
| 07.08.2007 | Добавленный язык для подчеркивания важности остановки решения один раз соединился со службой. |
| 06.10.2006 | Добавленный описания, которыми можно отменить работу решения. |
| 15.10.2003 | Новый документ, объясняющий, почему важно отменить Добрый день работа решения. |