加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 04:19:34 所属栏目:百科 来源:网络整理
导读:我有一个简单的C#应用??程序,它在单接收器,单发送器方案中使用UDP多播.目标是在本地网络环境中尽可能快地传递消息. 我使用过SocketAsyncEventArgs / SendAsync / ReceiveAsync,BeginSend / BeginReceive,Threads / Send / Receive,并尝试过PGM和UDP多播. 每
我有一个简单的C#应用??程序,它在单接收器,单发送器方案中使用UDP多播.目标是在本地网络环境中尽可能快地传递消息.

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

每个实现尝试都可以正常工作,通过本地发送,本地接收,可以重复传递大约1000条消息.之后,性能开始呈指数下降.在1000条消息需要几百分之一秒的情况下,10,000条消息可能需要2-10秒.

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

更新

现在,它只是一个本地运行的程序 – 一个带有1个发送器和1个接收器的应用程序.测试消息是4个字节.

解决方法

尝试使套接字的发送或接收缓冲区(服务器或客户端)足够大,以容纳您期望处理的流量.以下是我自己的UDP组播服务器/客户端在服务器端的一些示例C#代码,其中dataSock是我的Socket绑定到UDP多播组:
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循环中使用秒表以获得微秒级的延迟).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读