【问题标题】:Is it possible to have mDNS / Bonjour publish the same service name on different servers是否可以让 mDNS / Bonjour 在不同的服务器上发布相同的服务名称
【发布时间】:2018-05-07 14:50:46
【问题描述】:

我希望实现的是拥有提供特定服务的服务器列表。

例如假设我有server01,它发布了一个名为ControlSystem 的服务。现在我添加了server02,它还发布了一个名为ControlSystem 的服务。

我想要的是能够发现发布ControlSystem 服务的服务器列表。

我认为这应该是可能的(例如,您可能有不止一台打印机发布打印服务),但是当我使用dsn-sd -R 在两台不同的服务器上注册服务时,dns-sd -L 的输出是简单地说:

Lookup ControlSystem._http._tcp.local
DATE: ---Mon 07 May 2018---
16:45:57.867  ...STARTING...
16:45:57.868  ControlSystem._http._tcp.local. can be reached at ControlSystem._http._tcp.local.:5000 (interface 11)
16:45:57.869  ControlSystem._http._tcp.local. can be reached at ControlSystem._http._tcp.local.:5000 (interface 11)

这并不是真的有用,因为我想至少拥有两台服务器的 IP 地址。

【问题讨论】:

    标签: bonjour mdns


    【解决方案1】:

    正如您所说:“是否可以在不同的服务器上发布相同的服务名称”?答案是肯定的。

    但不是你已经实现的那样。

    服务名称,只是服务的名称,而不是实例的名称。例如,对于 Web 服务器服务,服务名称为 _http._tcp

    该名称可以跨服务器相同。

    服务器之间不能相同的是每个服务的实例。这通常是将设备名称与服务名称与域名连接起来(在 Bonjour / Zeroconf 中,这是.local)。 继续以 Web 服务器为例,这将导致 server1._http._tcp.localserver2._http._tcp.local。 此实例名称在服务器之间必须是唯一的(甚至在同一服务器内,以防您有多个服务,例如使用不同的端口)。

    设备名称也应该是唯一的。例如,对于 ZeroConf,它在多播 DNS RFC (8. Probing and Announcing on Startup) 中指定。


    关于您的具体情况,您在两台服务器上注册了相同的实例名称,如上所述,这是不允许的。

    您应该在每个服务器上注册不同的实例,即:

    dns-sd -R server01 _http._tcp local 8088
    dns-sd -R server02 _http._tcp local 8088
    

    在每个服务器中。

    完成此操作后,您应该能够浏览 HTTP 服务:

    dns-sd -B _http._tcp local.
    

    应该找到两个实例。


    最后,由于您正在尝试注册新的非标准服务 (ControlService),您只需将 _http 替换为您的服务名称,并将 _tcp 替换为实际协议(_tcp 或 @ 987654332@):

    dns-sd -R server01 ControlService._tcp local 8088
    dns-sd -R server02 ControlService._tcp local 8088
    

    还有查询:

    dns-sd -B ControlService._tcp local.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-04
      • 2022-01-26
      • 2016-08-16
      • 1970-01-01
      • 2016-12-16
      • 1970-01-01
      相关资源
      最近更新 更多