我們的應用程序使用Bonjour來發現網絡上的服務。在DNSServiceResolveCallback中,當發現新服務時,我將消息發送到應用程序的另一部分,然後繼續連接到新找到的服務器。心跳機制使我們能夠立即檢測到連接故障(例如拔下電纜)。如何刷新bonjour的服務列表?
Bonjour本身沒有檢測到這樣的故障,所以我明白我需要手動使Bonjour的緩存失效。
但是如何?
看來我需要撥打DNSServiceReconfirmRecord,但我應該通過哪些選項?特別是,我的全名,rrtype和rdata應該是什麼? Apple提供了an example(請參閱當解決失敗)但我真的不明白它。
Bonjour的緩存失效後,我會在哪裏通知服務不再存在?在什麼回調?
如果服務再次重新聯機(網絡電纜重新插入),我會在瀏覽回調中收到通知嗎?
這是否意味着您定期瀏覽(如每5秒鐘一次),建立已發現機器的列表並將其與以前的列表進行比較?我使用* select * [如本例中](http://code.google.com/p/pybonjour/),當機器消失時,不會調用Browse回調。 – Charles
瀏覽是連續的。您基本上正在註冊mDNS以接收新服務廣播的通知。在這個例子中''browse_callback''中的'if not(flags&pybonjour.kDNSServiceFlagsAdd):'正在做我在我的回答中描述的內容。 – jlujan
如果您直接使用這些示例,則應該看到服務清除。這是瀏覽器的輸出,並在啓動和停止寄存器示例後解析 $ python bonjour.py _test._tcp 已添加服務;解決 解決的服務: fullname = TestService。_test._tcp.local。 hosttarget = Ripley.local。 端口= 1234 服務刪除 服務添加;解決 解決的服務: fullname = TestService._test._tcp.local。 hosttarget = Ripley.local。 port = 1234 – jlujan