我的服务器如何向网络中的每个人宣布它的存在

我的服务器如何向网络中的每个人宣布它的存在

情况如下。我想在服务器上运行一个应用程序。公司里的所有桌面都必须连接到它。但我不希望将服务器的 IP 地址硬编码到桌面应用程序中。相反,我希望服务器能够通过某种广播机制宣布自己。桌面应用程序将监听这样的消息,从而了解服务器的 IP 地址,然后可以连接到它

我该怎么做?我需要使用多播吗?多播消息可以传多远?桌面应用程序如何监听多播数据?

答案1

最常见的方法是使用普通DNS。您的公司可能有自己的域名;可能是内部域名;只需在其下添加一个子域名 –myapp.internal.example.commyapp.corp类似的东西 – 并指向您的服务器地址。

myapp.<domain>.         A       10.0.0.5
myapp.<domain>.         AAAA    2001:db8::123:4

(毕竟,这是服务器,其 IP 地址不太可能每周更改。当它确实更改时,您只需更新 DNS 中的子域。)

您可以使其更加先进并使用SRV 记录而不是直接的 A/AAAA 地址记录。例如,XMPP 聊天协议使用 SRV 记录来定位域的服务器,这些服务器可以有多个,且具有不同的优先级:

chat1.<domain>.         A       10.0.0.4
chat2.<domain>.         A       10.0.0.7

                                ; priority, weight, port, hostname
_xmpp._tcp.<domain>.    SRV      0 0 5222 chat1.<domain>.
_xmpp._tcp.<domain>.    SRV     10 0 5222 chat1.<domain>.

对于应用程序来说,这更加复杂,因为它们现在需要一些逻辑来按 SRV 优先级然后按权重对返回的记录进行排序,但它可能会带来一些优势,例如能够添加较慢的“备份”服务器。


如果出于某种原因无法接受,你可以尝试现有的基于多播的服务发现协议(其中一些将名称解析和服务发现合二为一;而另一些则将其分开。)

  • Apple 和各种 Linux 发行版使用 Bonjour/Avahi,又名移动DNS(“多播 DNS”)结合DNS-SD用于通用服务发现和本地名称解析;

  • 微软更喜欢基于 UPnP 的国家国防计划,除非它喜欢服务发现而是使用 NetBIOS。所有记录都在函数提供程序

  • (有些程序决定仅以自己自定义的格式广播 UDP 数据报说“我在这里!”。这种方法效果不佳。)

通常有操作系统提供的 API 和第三方库来使用相应的发现协议查找特定的服务。

如果你要自己实现某些功能,每个操作系统也提供以下功能:加入多播组并接收任何人发送至该组的消息。IP 多播应该默认在广播域内工作,但通常需要配置为通过路由器

相关内容