Как вы сказали, is it possible to publish the same service name
на разных серверах, ответ - да.
Но не так, как вы это реализовали.
Имя service
- это просто имя службы, а не имя instance
. Например, для службы веб-сервера имя service
будет _http._tcp
.
Это имя может быть одинаковым на всех серверах.
Что не может быть одинаковым на разных серверах, так это instance
каждой службы. Обычно это соответствует конкатенации имени устройства с именем службы с именем домена (в Bonjour / Zeroconf это .local
).
Если продолжить с примером веб-серверов, это приведет к server1._http._tcp.local
и server2._http._tcp.local
.
Это имя экземпляра ДОЛЖНО быть уникальным для всех серверов (и даже внутри одного и того же сервера, если у вас будет несколько служб, например, с использованием разных портов).
Имя устройства также должно быть уникальным. Например, в случае ZeroConf он указывается в RFC для многоадресного DNS ( 8. Зондирование и оповещение при запуске ).
В вашем конкретном случае вы регистрируете на обоих серверах одно и то же имя экземпляра, которое, как указано выше, недопустимо.
Вы должны регистрировать на каждом сервере разные экземпляры, т. Е .:
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
или _udp
):
dns-sd -R server01 ControlService._tcp local 8088
dns-sd -R server02 ControlService._tcp local 8088
И запрос:
dns-sd -B ControlService._tcp local.