【发布时间】:2011-02-07 13:42:45
【问题描述】:
我需要每秒将 1000 个小对象从服务器程序推送到千兆 LAN 上的 100 个客户端,所以我需要最快的方法,谢谢。
我知道 usp 和 TCP 之间的区别 - 我在 udp 之上有一个层,以使其可靠且有序。
我应该使用哪个,为什么? udp 单播或 TCP。由于路由器原因,我不能使用 Udp 多播。
谢谢
【问题讨论】:
标签: tcp network-programming udp
我需要每秒将 1000 个小对象从服务器程序推送到千兆 LAN 上的 100 个客户端,所以我需要最快的方法,谢谢。
我知道 usp 和 TCP 之间的区别 - 我在 udp 之上有一个层,以使其可靠且有序。
我应该使用哪个,为什么? udp 单播或 TCP。由于路由器原因,我不能使用 Udp 多播。
谢谢
【问题讨论】:
标签: tcp network-programming udp
客户端可以相互通信吗?最终,您的服务器只有有限数量的电线,这限制了您的速度。让客户端完成一些分发工作会给您更多的线路,因此比任何协议更改都更快地增加您的速度。
TCP 本质上是具有可靠性层的 UDP - 正是您所拥有的。然而,TCP 是在硬件中实现的,并且已经过验证。您的可靠性层位于软件中(速度较慢)且未经证实(有风险)。
【讨论】:
如果您在 UDP 之上有一个自定义层,那么在与 TCP 进行比较时,还需要考虑其性能 - 所以我认为 SO 上的任何人都无法为您提供明确的回答。
我认为唯一可以确定的方法是在最真实的环境中彻底测试这两种解决方案
【讨论】:
毫无疑问,UDP 单播,因为您在其之上有一个可靠的层。 TCP 的问题在于您无法从 PUSH 服务器控制它的速度。它取决于堆栈中编码的许多算法。使用 UDP,您可以尽可能快地发送服务器。那是应该应对这种速度的客户。
这当然不考虑标准的“UDP 不可靠”部分,因为您似乎已经解决了这个问题:)
my2c.
PS:UDP组播规则,可惜网络硬件配置这么差;)
【讨论】:
性能取决于您在 UDP 之上的层。如果您的层使用三次握手、拥塞窗口、序列号等重新发明 TCP,那么性能可能会更差。
否则 UDP 应该更快。
(每秒 1000 个小对象到 100 个客户端并不算多,恕我直言)
【讨论】: