【问题标题】:Need to Bonjour twice?需要 Bonjour 两次?
【发布时间】:2011-04-28 19:30:50
【问题描述】:

我在端口 66661 上启动了一个 TCP 侦听服务器。我为此创建了 Bonjour 通知。没问题。

在任何人在 66661 连接之前,应用程序会在另一个端口上创建另一个不相关的网络服务(另一个 TCP 侦听服务器),并以相同的方式创建 Bonjour 广告,这次是在 66662 上。

这也很完美,设备可以看到 Bonjour 广告,然后在 66662 连接。

请注意,66661 应该并且确实仍然可以允许其他类型的播放器在那里连接...没问题。

但是...我发现 -- 在 66662 之后 -- 66661 的 bonjour 广告是不稳定的

有时会出现/有时会消失。(我们无法找到确切的模式。)

在开始第二个 Bonjour 广告之后,有没有人在 Bonjour 中看到过这种片面?

一个变通的解决方案.. 66662 满意后,我只是为 66661 创建另一个相同的 Bonjour 广告。与早期的 Bonjour 代码广告 66661 完全相同。

似乎没有问题,而且确实,确实在大量 iOS 应用上运行完美,没有任何投诉、崩溃等问题。但这很奇怪。 p>

问题 1,我相信 技术说明 QA1333 表明发生两个或多个此类 Bonjour 事件是完全可以的。任何人都知道这一点,这是正确的,曾经对问题进行 DTS 处理吗?

问题 2,为什么在您创建了另一个 Bonjour 广告的情况下,第一个 Bonjour 广告会停止工作——有时是,有时不是?

有人看过吗?有任何想法吗?干杯。

根据 Kevin 的建议:是的,我们使用 Bonjour 浏览器和众多设备/Mac 等工具对此进行了彻底的测试。

根据 Jarrod 的建议:是的,当它停止/消失时,它会“为所有客户”停止。我想我实际上不知道如何以编程方式(在服务器上)判断它是否“未注册”。

【问题讨论】:

  • 既然你在写 Obj-C,你为什么用 CoreNetwork 而不是 NSNetService API 的?

标签: iphone ios networking bonjour


【解决方案1】:

尝试从局域网上的任何 Mac 在终端中运行 dns-sd -B _blah._tcp. .。这将打开对该服务的查询,您可以查看添加和删除事件。这是验证您的服务是否被显式取消注册的好方法,而不是(仅作为示例)一旦新客户端在事后开始侦听后无法正确广播。

【讨论】:

    【解决方案2】:

    Bonjour 是多播 UDP,根据定义,UDP 是不可靠的。消息可能而且确实会丢失。

    您没有明确说明该服务是未注册还是只是看起来不存在。这将需要一些调试和多个客户端来查看服务是否实际上完全停止响应对所有客户端的所有请求或只是一些,或者注册服务器上的某些东西是否由于错误的 TTL 或其他配置或逻辑错误而终止服务发布.

    【讨论】:

    • 随心所欲地投反对票,但 Zeroconf 是多播 udp,如果您认为否则您将无法阅读规范以进行理解。您可以宣传_tcp 服务,但 Zeroconf/Bonjour 通信的协议是多播 udp,被认为是不可靠的。因此,您想要的所有投票都不会使您正确。你嘲讽评论只是证明你不明白你在评论什么,另一个答案是关于搜索一个正在广播的服务,它恰好是一个基于 tcp 的服务。
    猜你喜欢
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 2018-07-02
    相关资源
    最近更新 更多