Наше приложение использует Bonjour для обнаружения услуг в сети. В DNSServiceResolveCallback, когда обнаружена новая служба, я отправляю сообщение в другую часть приложения, а затем переходит к подключению к вновь найденному серверу. Механизм сердечного ритма позволяет нам немедленно обнаруживать сбои подключений (например, отсоединенный кабель).Как обновить список услуг bonjour?
Такие сбои не обнаружены самим Bonjour сразу, поэтому я понимаю, что мне нужно вручную аннулировать кеш Bonjour.
Но как?
Кажется, что мне нужно вызвать DNSServiceReconfirmRecord, но какие варианты я должен пройти? Тем более, что мое фамилия, rrtype и rdata должно быть? Apple предоставляет an example (см. при разрешении отказов), но я этого не понимаю.
После того, как кеш Bonjour был признан недействительным, откуда я буду уведомлен, что служба больше не существует? В каком обратном вызове?
Если услуга снова возвращается в сеть (сетевой кабель перегружен), будет ли я уведомлен в обратном вызове просмотра?
Означает ли это, что вы регулярно просматриваете (как каждые 5 секунд), создаете список обнаруженных машин и сравниваете его с предыдущим списком? Я использую * select * [как в этом примере] (http://code.google.com/p/pybonjour/), и когда машина исчезает, обратный вызов Browse не вызывается. – Charles
Просмотр непрерывный. Вы в основном регистрируетесь в mDNS для получения уведомлений о новых услугах. 'if not (flags & pybonjour.kDNSServiceFlagsAdd):' in 'browse_callback' в примере выполняет то, что я описал в своем ответе. – jlujan
Если вы используете эти примеры напрямую, вы должны увидеть удаление служб. Это вывод браузера и разрешение после запуска и остановки примера регистра $ python bonjour.py _test._tcp Добавлена услуга; разрешение Решенное обслуживание: Полное имя = TestService._test._tcp.local. hosttarget = Ripley.local. port = 1234 Служба удалена Служба добавлена; Разрешающая способность Решенное обслуживание: Полное имя = TestService._test._tcp.local. hosttarget = Ripley.local. port = 1234 – jlujan