3

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

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

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

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

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

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

4

1 回答 1

1

您可以将您的服务完全保持在本地(在 Intranet 中),并通过实施打孔建立在您现在使用的服务之上。您可以通过防火墙,但我真的不确定 AV 软件策略。

或者您可以在 Internet 上建立一个著名的基于 http 的发现服务。

  1. 服务器启动,将其(本地)IP 地址发送到发现服务(不断发送保持活动状态)
  2. 启动时,客户端查询该发现服务,识别他所在的本地子网,并取回服务器的本地 IP 地址。

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

于 2012-06-09T16:20:17.687 回答