首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >负载下的UDP多播性能

负载下的UDP多播性能
EN

Stack Overflow用户
提问于 2009-10-31 00:36:27
回答 2查看 3.8K关注 0票数 6

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

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

每次实现尝试都可以用于重复消息传递,使用本地发送、本地接收的消息最多可达1000条。在那之后,性能开始指数下降。在1000条消息需要几百秒的情况下,10,000条消息可能需要2-10秒。

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

更新

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-05 16:07:12

尝试使套接字的发送或接收缓冲区(服务器或客户端)足够大,以适应您期望处理的通信量。下面是来自我自己的UDP组播服务器/客户机的一些示例C#代码,在服务器端,dataSock是绑定到UDP组播组的Socket

代码语言:javascript
运行
复制
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 (在时间循环中使用Stopwatch来表示微秒级的延迟)。

票数 9
EN

Stack Overflow用户

发布于 2009-10-31 03:56:07

我不是这方面的专家,但这听起来像是你与你的网络容量的碰撞。您可能需要升级硬件以获得更好的吞吐量。但是,如果不知道数据包的大小、网络带宽或有多少台机器试图通信等等,那只是猜测而已。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1652965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档