在Linux上,编写一个每秒接收100万UDP数据包的程序究竟有多难

在Linux上,编写一个每秒接收100万UDP数据包的程序究竟有多难,第1张

UDP接收比TCP接收要简单很多,性能也要高很多

假设你要接受的UDP包都是最大MTU,不大于1500字节一个包,100万个UDP包也就是1.5GBps的流量,这个并不困难,当然首先网口要有足够的带宽。我以前开发的流媒体转发服务,在生产环境下,一台设备上游UDP包可以接收2.7GBps,并同时转发出去。

当然这个和程序运行的设备配置是有关系的,主要是网卡和CPU

给你几个建议:

1:多线程处理,单个线程处理能力还是有限的,同时尽量把线程绑定到CPU核上。

2:linux系统的网络参数要优化,包括读写缓冲区大小

3:如果非必要,可以采用阻塞模式接收,性能比非阻塞要好。

有3点值得说明: 1. 上面我们仅仅写了接收的内核缓冲区, 关键字是SO_RCVBUF, 如果是发送的内核缓冲区, 那就用SO_SNDBUF, 有兴趣的童鞋可以稍微修改一下上面程序即可。

2. 从程序的结果我们可以看到, sockClient1和sockClient2两者的发送内核缓冲区没有任何关系。

3. 听一网友说过, tcp才有所谓的内核缓冲区, udp没有。

如果说你想让vmware中的linux互相访问,你这么做虚拟机的网卡应该是不可以的,你必须将两个虚拟机的网卡模式都做成一样的,要么NAT,要么桥接,NAT的话要看你NAT的是哪个虚拟网卡,说起来比较麻烦,还是建议用桥接模式,至于你说的UDP,没有什么穿透的概念,你只要将两个虚拟机能互相ping通,UDP就可以互相访问。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8692282.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-20
下一篇 2023-04-20

发表评论

登录后才能评论

评论列表(0条)

保存