网络编程效率差的问题?

kacy16 kacy16 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
目前在开发一个项目,使用UDP协议进行相互的网络通信(内部的小型局域网),其中自定义了简单的应用层协议,

接收方:当接收到一帧信息后,马上回送一帧确认信息帧。
发送方:发送一帧信息后,循环等待一定的次数,从一全局的接收队列中查找该发送帧的确认信息帧,
确认已经收到信息帧。

具体的实现方式:网络通信这一块有两个独立线程(整个软件总共有大概6个线程左右),分别对同一个socket文件描述符进行读写。
接收线程: 采用select+recvfraom的模式,把接收到的数据存放到接收数据队列中。
发送线程: 发送一帧数据,usleep(20000), 然后循环等待一定的次数从接收数据队列中查找确认帧。
大致的代码如下:
ret=sendto(m_fdsock,data)
usleep(20000);
for(i=0; i<30; i++)
{
usleep(20000);
ack_ret=find_ackframe(g_revlist);
if(ack_ret)
break;
else
continue;

}

系统环境: OS是 center os 6.3(linux 2.6.32),内部的小型局域网, 目前测试还是一对一的机器在进行通信,
即一台服务端,只联了一台客户端。信息数据帧的数据量才60个Byte左右。
在服务端 ping 客户端的话,观察到的往返时间平均在 2ms左右。

观察到的现象: 需要循环20几次才接收到确认信息帧,即是发送了一帧信息帧后,过了400多毫秒才接收到信息帧。
我感觉这个现象很不正常,想请教各位问题的原因大概有哪些?可以从哪些方面去着手观察并优化?
...全文

相关推荐

评论 7
收藏 已收藏
分享
返回顶部
kacy16
通信技术 4,397 成员 28,909 内容