Tôi đang sử dụng Bonjour (NSNetServiceBrowser, chính xác) qua WiFi trong ứng dụng tôi đang phát triển cho một dự án iOS mà tôi đang thực hiện.Các vấn đề về NSNetServiceBrowser/Bonjour trên iOS
Tuy nhiên, mặc dù lưu ý các vấn đề được nêu ra trong phản hồi tuyệt vời tại Why does NSNetServiceBrowser find unpublished services in iPhone OS? Tôi vẫn gặp phải một số khó khăn với NSNetSericeBrowser.
tôi thiết lập như sau:
- Làm việc với iPad chạy iOS 4.5.3.
- Sử dụng AirPort Express làm điểm truy cập/bộ định tuyến.
- Chạy dns-sd -B _serviceName trên máy Mac của tôi được kết nối với mạng hoạt động tốt - tức là, tất cả các cuộc gọi để xuất bản và dừng đều được phản ánh ngay trên màn hình.
Tuy nhiên, tôi đã trải qua những vấn đề sau: - (. Khoảng 15mins +)
- dịch vụ được xuất bản trong một thời gian dài có xu hướng không bị loại bỏ trên khách hàng mặc dù họ biến mất khỏi Mac! (ví dụ: didRemoveService không được gọi).
- Đôi khi các dịch vụ được xuất bản không được thấy bởi những người khác trên mạng, mặc dù chúng xuất hiện trên máy Mac! (tức là didFindService không được gọi) - điều này có thể liên quan đến các điểm 3/4 bên dưới ... theo đó nếu ứng dụng bắt đầu chạy (và tìm kiếm) trước khi iPad được kết nối với mạng thì nó không tìm kiếm mạng đúng cách.
- Điều gì sẽ xảy ra nếu thiết bị thay đổi mạng sau khi xuất bản một dịch vụ? Tôi đã thấy rằng Bonjour không không xuất bản lại dịch vụ trên mạng mới - làm cách nào để buộc điều này xảy ra?
- Điều gì xảy ra nếu thiết bị thay đổi mạng trong khi tìm kiếm dịch vụ? Tôi đã tìm thấy rằng điều này gây ra vấn đề quá, và nó có xu hướng kết quả trong phiên không được tìm thấy (didFindService không được gọi).
Các vấn đề tôi gặp phải rất lạ, vì Bonjour hoạt động 90% thời gian ... chỉ 10% làm hỏng độ tin cậy của ứng dụng của tôi! Điều khó chịu này là TẤT CẢ các vấn đề trên có thể được giải quyết bằng cách nhấn đúp nút home và đóng ứng dụng, sau đó chạy lại nó. Sau khi chạy nó một lần nữa, nó luôn luôn tìm thấy các phiên chính xác hoặc xuất bản đúng cách.
Một cách để tránh vấn đề này là phá bỏ và khởi động lại NSNetServiceBrowser bất cứ khi nào mạng không dây bị thay đổi ... nhưng điều này có vẻ rất lộn xộn và không cần thiết. Điều bực bội là Bonjour là một API cấp cao mà không có bất kỳ tùy chọn thực tế nào để tinh chỉnh và kiểm tra.
Bất kỳ ý tưởng nào về cách tôi có thể sắp xếp các vấn đề 1-4?
Cảm ơn!
Không hiểu tại sao câu hỏi này chưa nhận được sự chú ý nhiều hơn, tôi có vấn đề tương tự và nó thực sự khó chịu. – jbat100