gpt4 book ai didi

c# - 负载下的 UDP 组播性能

转载 作者:太空狗 更新时间:2023-10-29 21:15:43 25 4
gpt4 key购买 nike

我有一个简单的 C# 应用程序,它在单接收方、单发送方场景中使用 UDP 多播。目标是在本地网络环境中尽可能快地传递消息。

我使用过 SocketAsyncEventArgs/SendAsync/ReceiveAsync、BeginSend/BeginReceive、Threads/Send/Receive,并尝试过 PGM 和 UDP 多播。

每次实现尝试都可以通过本地发送和本地接收重复发送最多约 1000 条消息。之后,性能开始呈指数下降。 1000 条消息需要百分之几秒,而 10,000 条消息可能需要 2-10 秒。

有没有人有高性能UDP/PGM多播的经验?获得最大吞吐量的最佳设计是什么?

更新

现在,它只是一个本地运行的程序——1 个应用程序,1 个发送方和 1 个接收方。测试消息为 4 个字节。

最佳答案

尝试使套接字的发送或接收缓冲区(服务器或客户端)足够大以容纳您期望处理的流量。以下是服务器端我自己的 UDP 多播服务器/客户端的一些示例 C# 代码,其中 dataSock 是我绑定(bind)到 UDP 多播组的 Socket:

dataSock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveBuffer, (NumberOfPackets * PacketSize) + SmallEpsilonForExtraHeadroom);

还要确保在客户端设置 SocketOptionName.SendBuffer 以匹配服务器生成的缓冲区大小。

我还建议,如果您还不知道的话,让您的数据包大小小于 MTU。默认情况下,MTU 设置为 1500 字节。 (MTU是最大传输单元大小)

除非您也限制发送速率,以确保您的客户端能够跟上,否则您仍然可能会丢失数据包。您的网络硬件很可能不是这里的瓶颈。看我的问题Need microsecond delay in .NET app for throttling UDP multicast transmission rate寻找该问题的答案(在 while 循环中使用 Stopwatch 以实现微秒级的延迟)。

关于c# - 负载下的 UDP 组播性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1652965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com