我在两个程序之间使用 UDP 通信,大概每秒会有 200 个数据包发出,每个数据包内容大多在 100 字节以内,这么多的数据包会对程序有很大的压力嘛?
我没学过通信相关的东西,对这方面的东西基本没有什么了解
1
Lax 2019-06-13 15:31:57 +08:00
100B x 200 /s,加上报头算算带宽才多少
|
2
zhs227 2019-06-13 15:32:45 +08:00
基本上处在一个很轻的水平,只要收包的后处理不要太 费时
|
3
ruxuan1306 2019-06-13 15:33:25 +08:00
UDP 头、IP 头、MAC 头加起来大概 50B。
发送速率:(100B+50B)*200/1s=30000B/s=30KB/s=240kb/s=0.24Mb/s 只要你的上行带宽高于 0.24Mb/s,我觉得,都没什么问题。 |
4
ryd994 2019-06-13 15:51:12 +08:00 via Android 2
200pps 问题不大,单线程都可以轻松应对。超过几千的话可以考虑 port reuse。再高可能就不得不 dpdk 了。
@Lax @ruxuan1306 对于 100B 的小 UDP 包,瓶颈不在带宽。且不说一般的网络栈,就算 dpdk 也几无可能跑到带宽上限。 建议二位先看篇文章学习一下基础 https://blog.cloudflare.com/how-to-receive-a-million-packets/ |
5
MonoLogueChi OP @Lax @ruxuan1306 带宽不是问题,都是局域网通信,甚至很多情况都是单机上面的通信,主要是处理能力。
@ryd994 谢谢解答,服务端和客户端都是我自己拿 C#撸出来,主要是怕自己写的东西性能太差,处理不过来。 |
6
MonoLogueChi OP @zhs227 处理不是很费时,一个 UTF8 编码的字符串,然后反序列化就可以了,我是担心收发包压力过大
|
7
ryd994 2019-06-14 00:32:09 +08:00 via Android
@MonoLogueChi 涉及到业务的话就没底了
可以多线程,一个线程专门负责收发,也可以直接用 port reuse。 |
8
Lax 2019-06-14 10:32:35 +08:00
@ryd994 谢谢指点🙏
@MonoLogueChi 提到带宽是因为从直觉也会知道那么少的包不会有问题。前些年我还在搞网卡的时候测出过单机 1200k pps,现在上限应该更高了。另外楼主大部分是单机通讯在 loopback 设备上,更不会受到实际网卡的限制。 |