如何自动检测服务器?

时间:2012-06-05 16:36:19

标签: language-agnostic client-server service-discovery

我们开发了一个客户端应用和服务器应用。客户端使用http协议与服务器通信,并发送一些数据以供服务器处理。

我们的结构允许我们在任何地方安装服务器。我可以在同一个客户端网络上,甚至可以在云端。

当服务器托管在云上时,向用户询问服务器地址是有意义的(因为如果用户希望它可以改变),但是当服务器与客户端在同一网络上时没有意义。除此之外,我们目前要求用户配置服务器ip / name以连接到服务器。

为了避免这种情况(向用户询问地址),我开发了基于UDP的发现服务。客户端广播服务器用其地址回答的消息。它确实适用于某些情况,但当用户拥有某种防火墙,代理甚至是反病毒时它不会。

我已经阅读了很多关于发现服务的内容,而最喜欢发现服务的内容是Bonjour

所以,问题是:当服务器与客户端在同一网络上而不被防火墙,代理等阻止时,发现服务器IP的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以将您的服务保持在本地(在Intranet中),并通过实施hole punching来构建您现在使用的服务。你可以通过防火墙,但我真的不确定AV软件政策。

或者您可以在互联网上建立一个着名的基于http的发现服务。

  1. 服务器活跃,将其(本地)IP地址发送到发现服务(不断发送保持活动)
  2. 启动时,客户端查询该发现服务,识别他所在的本地子网,并获取服务器的本地IP地址。
  3. 当然,这会在您的系统中造成单点故障,因为如果发现服务启动了存储桶,则您的客户端无法找到服务器。您可以通过复制服务和/或引入回退机制(例如您所拥有的纯粹本地发现)来解决这个问题,无论如何您可能想要这样做。您可能遇到的唯一问题是子网标识,如果本地子网中的计算机不共享外部IP地址(那么它取决于本地子网的用途)。