Language agnostic 如何自动检测服务器?

Language agnostic 如何自动检测服务器?,language-agnostic,client-server,service-discovery,Language Agnostic,Client Server,Service Discovery,我们开发了一个客户端应用程序和一个服务器应用程序。客户端使用http协议与服务器通信,并发送一些数据供服务器处理 我们的结构允许我们在任何地方安装服务器。我可以在同一个客户端网络上,甚至可以在云上 当服务器托管在云上时,向用户询问服务器地址(因为如果用户愿意,它可以更改)是有意义的,但当服务器与客户端位于同一网络上时则没有意义。除此之外,我们目前正在要求用户配置服务器ip/名称,以便连接到服务器 为了避免这种情况(询问用户地址),我开发了一种基于UDP的发现服务。客户机广播一条消息,服务器用其地

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

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

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

为了避免这种情况(询问用户地址),我开发了一种基于UDP的发现服务。客户机广播一条消息,服务器用其地址应答。它在某些情况下确实有效,但当用户拥有某种防火墙、代理甚至反病毒时就不起作用了

我已经读了很多关于discovery services的书,其中一本是最受欢迎的


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

您可以将服务保持在纯本地(在内部网中),并通过实现在您现在使用的基础上进行构建。你可以通过防火墙,但我真的不确定AV软件政策

或者,您可以在internet上建立著名的基于http的发现服务

  • 服务器处于活动状态,将其(本地)ip地址发送到发现服务(持续发送保持有效)
  • 启动时,客户机查询该发现服务,确定其所在的本地子网,并获取服务器的本地ip地址

  • 这当然会在您的系统中造成单点故障,因为如果发现服务失败,您的客户机将无法找到服务器。您可以通过复制服务和/或引入回退机制(如您拥有的纯本地发现)来解决这一问题,您可能无论如何都想这样做。如果本地子网中的计算机不共享外部IP地址(这取决于本地子网对您来说是什么),那么您可能遇到的唯一问题就是子网标识。

    让客户端请求防火墙允许入站UDP数据包进入您选择的端口吗?我不能。我的软件分布广泛,所以我无法控制它在什么环境下运行。