远程服务器自动发现。广播与否?
我有一个与.Net远程通信的客户端/服务器应用程序。我需要我的客户端能够在不需要客户端配置的情况下找到网络上的服务器。
据我所知,远程处理中不支持发现。我准备实施UDP解决方案,使客户端可以通过广播消息找到服务器。
在继续之前,我想听听SO的集体智慧。这是最好的方法吗?还有其他建议吗?
解决方案
回答
我在远程工作中发现的最佳解决方案是将服务器列表保留在客户端系统上的配置文件中,并使其可更新。它不是最容易维护的,但是速度很快,并且没有广播。
回答
似乎我们需要的是简单服务发现协议或者SSDP。作为Microsoft对通用即插即用支持的一部分,它在Windows中实现。由于这是行业标准协议,因此似乎是一个不错的选择。例如,如果我们要处理防火墙或者其他问题,那么其他人已经可以解决这个问题,而不必推出自己的解决方案。
由于我们正在使用.NET,因此我假设我们使用的是Windows。有一个较旧的文档(2001年),描述了Windows的C风格API和COM API,标题为"通用即插即用(UPnP)客户端支持"。 UPNP.DLL公开COM API,SSDPAPI.DLL公开SSDP的C样式API。
UPNP的COM样式的API可能是我们最好的选择。由于Ccan可以为我们包装COM对象并处理互操作。我找不到任何将此API本地移植到Cor .NET Framework的地方。
回答
我已经针对这种类型的功能同时研究了SSDP和UPnP,但我建议使用自定义UDP多播解决方案。基本上,多播与广播非常相似,但是仅会联系已加入多播组(即请求广播)的机器。
恕我直言,SSDP和UPnP肿,资源发现过于复杂...但是,这是一个标准。 ;)
回答
我们可能还考虑了Apple的Bonjour,这是它们的Zeroconf实现。它适用于Mac,PC和Linux / BSD。
回答
由于最近的MS更新,我的多播UDP解决方案似乎不可靠。