Я использую Bonjour (точнее, NSNetServiceBrowser) через Wi-Fi в приложении, которое я разрабатываю для проекта iOS, над которым я работал.
Однако, несмотря на то, что отмечены проблемы, поднятые в отличном ответе на Почему NSNetServiceBrowser нашел неопубликованные службы в iPhone OS? Я все еще сталкиваюсь с рядом трудностей с NSNetSericeBrowser.
Моя установка выглядит следующим образом:
- Работа с iPad под управлением iOS 4.5.3.
- Использование AirPort Express в качестве точки доступа / маршрутизатора.
- Запуск dns-sd -B _serviceName на моем Mac, подключенном к сети, работает нормально - то есть все вызовы публикации и остановки немедленно отображаются на рабочем столе.
Однако у меня возникли следующие проблемы: -
- Службы, которые публикуются в течение длительного времени (примерно 15 минут +), как правило, не удаляются на клиентах, даже если они исчезают с Mac! (т.е. didRemoveService не вызывается).
- Иногда опубликованные службы не видны другим пользователям в сети, даже если они появляются на Mac! (т. Е. DidFindService не вызывается) - это, вероятно, связано с пунктами 3/4 ниже. y при этом, если приложение запускается (и выполняет поиск) до того, как iPad будет подключен к сети, оно не будет выполнять поиск в новой сети должным образом.
- Что произойдет, если устройство сменит сеть после публикации службы? Я обнаружил, что Bonjour не повторно публикует службу в новой сети - как это сделать?
- Что произойдет, если устройство сменит сеть во время поиска услуг? Я обнаружил, что это тоже вызывает проблемы и обычно приводит к тому, что сеанс не обнаруживается (didFindService не вызывается).
Проблемы, которые у меня были, очень странные, потому что Bonjour работает 90% времени ... только эти 10% снижают надежность моего приложения! Раздражает то, что ВСЕ вышеперечисленные проблемы можно решить, дважды нажав кнопку «Домой» и принудительно закрыв приложение, а затем повторно запустив его. После повторного запуска он ВСЕГДА находит правильные сеансы или правильно публикует.
Один из способов обойти эту проблему - отключить и перезапустить NSNetServiceBrowser при каждом изменении беспроводной сети ... но это кажется очень беспорядочным и ненужным. Разочаровывает то, что Bonjour - это высокоуровневый API без каких-либо реальных возможностей для настройки и тестирования.
Есть идеи, как я могу разобраться в вопросах 1-4?
Спасибо!