linux中有哪些办法提高UDP的发送速度

linux中有哪些办法提高UDP的发送速度,第1张

代码如下:

#include <winsock2.h>

#pragma comment(lib,"ws2_32.lib")

#include <iostream>

#include <time.h>

int main()

{

char log[256] = "20100119161638|20100118184827|20100119235141|3|10.90.177.67|53391|117.136.31.195|21920|211.136.192.6|53391|0.0.0.0|0|0|0|17|218|1"

WSADATA wsd

if(WSAStartup(MAKEWORD(2,2),&wsd)) {

cerr <<"WSAStartup error..." <<endl

return INVALID_SOCKET

}

SOCKET sockClient = socket(AF_INET,SOCK_DGRAM,0)

SOCKADDR_IN addrSrv

addrSrv.sin_family = AF_INET

addrSrv.sin_addr.S_un.S_addr = inet_addr("172.18.11.32")

addrSrv.sin_port = htons(514)

bind(sockClient,(SOCKADDR*)&sockClient,sizeof(SOCKADDR))

unsigned long sendTime = 20//发送时间

time_t nowTime = time(NULL)

time_t endTime = nowTime + sendTime

while(time(NULL) <endTime)

{

sendto(sockClient,log,strlen(log)+1,0,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR))

}

std::cout <<"finished sending " <<std::endl

closesocket(sockClient)

WSACleanup()

getchar()

}

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

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

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

给你几个建议:

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

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

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


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存