|
|
1
4
我在过去几次使用选项2。它适用于简单的网络拓扑。当UDP数据报超过Ethernet MTU时,我们确实看到了一些吞吐量问题,导致大量碎片。我们所看到的最大问题是,由于许多路由器被配置为阻止多播通信,多播发现在更大的拓扑中崩溃。 这个 issue that Greg alluded to 在设计协议套件时要考虑到这一点。一旦你超越了简单的网络拓扑,你就必须找到解决方案 address translation , IP spoofing ,以及与从发现层到通信层的切换相关的大量其他问题。其中大多数都与服务器如何识别自身以及确保客户机可以使用标识有关。
如果我能再做一遍(我们说了多少次这个短语),我会寻找符合法案的基于标准的发现机制,并开始解决其他协议套件问题。最后一件你真正想做的事是想出一个非常好的发现方案,因为一些不可预见的网络拓扑结构,在你部署后的一周内就可以完成。谷歌
|
|
|
2
2
我建议使用方法2,因为很可能(取决于应用程序)您拥有的客户端比服务器多得多。通过让服务器发送一个信标,您只能每隔一段时间发送一个数据包,而不是为每个客户机发送一个数据包。 该方法的另一个好处是,它使得客户端更容易确定何时可以获得新服务器,或者当现有服务器离开网络时,因为它们不必维护到每个服务器的连接,或者保持轮询每个服务器,以找出。 |
|
|
3
1
两者都是同样可行的方法。 方法1的论点是,通常情况下,客户机发起请求,服务器监听并响应请求。 方法2的论点是,多播的目的是让一个主机可以发送一个数据包,并且它可以被许多客户端(一对多)接收,所以它应该与1相反。 好吧,当我想到这一点时,我实际上被#2,服务器启动的信标所吸引。#1的问题是,假设客户机广播信标,它们与服务器连接,但服务器要么脱机,要么更改其IP地址。 当服务器备份并发送其第一个信标时,将同时通知所有客户端重新连接,并且您的整个系统将立即备份。使用#1,所有客户机都必须单独意识到服务器已不存在,并且它们都将同时开始多播,直到重新连接到服务器。如果您有1000个客户机和1个服务器,那么您的网络负载实际上将比方法2大1000倍。 我知道这些消息很可能很小,一次1000个数据包对UDP网络来说毫无意义,但是从设计的角度来看2感觉更好。 编辑: 我觉得我正在发展一种分裂的人格障碍,但只是想了一个强大的点,为什么1将是一个优势。。。如果您曾经想要实现某种自然的负载平衡或在多个服务器上扩展,那么design#1可以很好地实现这一点。这样,第一个“可用”服务器就可以响应客户机的信标并连接到它,而不是所有客户机都跳到信标服务器的#2。 |
|
|
4
1
您的选项2有一个很大的限制,因为它假设服务器可以或多或少地直接与每个可能的客户机通信。根据操作系统的确切网络架构,情况可能并非如此。例如,您可能会依赖于所有路由器、VPN软件、广域网和nat以及人们连接网络时所用的任何其他东西,实际上都可以处理多播信标包。 使用#1,您假设客户机可以向服务器发送UDP数据包。这是一个完全合理的预期,特别是考虑到客户机接下来要做的事情是建立到同一服务器的TCP连接。 如果服务器坏了,客户想知道什么时候备份,那么 当然 使用 exponential backoff 否则总有一天你会因为一场数据包风暴而摧毁网络! |
|
|
Ignatius Lijo · 我的网络设备未接收到广播消息 10 年前 |