Sockets UDP服务器发现-客户端应该发送多播以查找服务器,还是服务器应该发送常规信标?
我有需要全部连接到单个服务器进程的客户端。我正在为客户端使用UDP发现来查找服务器。我有客户端和服务器的交换IP地址和端口号,以便在完成发现后可以建立TCP/IP连接。这样,数据包的大小保持较小。我发现这可以通过使用UDP的两种方式之一实现:Sockets UDP服务器发现-客户端应该发送多播以查找服务器,还是服务器应该发送常规信标?,sockets,udp,multicast,discovery,Sockets,Udp,Multicast,Discovery,我有需要全部连接到单个服务器进程的客户端。我正在为客户端使用UDP发现来查找服务器。我有客户端和服务器的交换IP地址和端口号,以便在完成发现后可以建立TCP/IP连接。这样,数据包的大小保持较小。我发现这可以通过使用UDP的两种方式之一实现: 每个客户机发送自己的多播消息以搜索服务器,然后服务器响应该消息。客户端可以定期(在服务器停机的情况下)重复发送此多播消息,直到服务器响应 服务器定期发送多播消息信标。客户端订阅多播组,并以这种方式接收服务器的多播消息并完成发现 在1。如果有许多客户机,那么
这种方法的另一个好处是,它使客户机更容易确定新服务器何时可用,或现有服务器何时离开网络,因为他们不必维护与每台服务器的连接,也不必不断轮询每台服务器来找出答案。这两种方法同样可行 方法#1的论点是,在正常原则下,客户端启动请求,服务器监听并响应请求 方法#2的论点是,多播的目的是让一个主机可以发送一个数据包,并且它可以被多个客户端(一对多)接收,因此它与#1相反 好的,当我想到这一点时,我实际上被吸引到了#2,服务器启动的信标。#1的问题是,假设客户端广播信标,它们与服务器连接,但服务器脱机或更改其IP地址 当服务器备份并发送其第一个信标时,将同时通知所有客户端重新连接,并且您的整个系统将立即备份。使用#1,所有客户机都必须单独意识到服务器不在了,并且都会同时开始多播,直到与服务器重新连接。如果您有1000个客户端和1台服务器,那么您的网络负载将比方法2大1000倍 我知道这些消息很可能很小,一次1000个数据包对UDP网络来说算不了什么,但从设计角度来看,2感觉更好 编辑:我觉得我在发展分裂型人格障碍,但我想到了一个强有力的观点,为什么#1会是一种优势。。。如果您曾经想在多台服务器上实现某种自然的负载平衡或扩展,design#1非常适合这一点。这样,第一个“可用”服务器可以响应客户端的信标并连接到它,而不是所有客户端都跳转到信标服务器的#2。您的选项#2有一个很大的限制,因为它假设服务器或多或少可以与每个可能的客户端直接通信。根据操作系统的确切网络体系结构,情况可能并非如此。例如,您可能依赖于所有路由器和VPN软件、WAN和NAT以及人们连接网络的任何其他东西,实际上都可以处理多播信标数据包 对于#1,您假设客户端可以向服务器发送UDP数据包。这是一个完全合理的期望,特别是考虑到客户端接下来要做的事情是与同一服务器建立TCP连接 如果服务器宕机,客户机想知道它何时备份,请务必使用,否则总有一天你会因数据包风暴而导致网络崩溃 我在过去几次使用过选项2。它适用于简单的网络拓扑。当UDP数据报超过以太网MTU导致大量碎片时,我们确实看到了一些吞吐量问题。我们所看到的最大问题是,由于许多路由器被配置为阻止多播流量,因此多播发现在更大的拓扑中出现故障 这是拉思