网络编程效率差的问题?
目前在开发一个项目,使用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多毫秒才接收到信息帧。
我感觉这个现象很不正常,想请教各位问题的原因大概有哪些?可以从哪些方面去着手观察并优化?
接收方:当接收到一帧信息后,马上回送一帧确认信息帧。
发送方:发送一帧信息后,循环等待一定的次数,从一全局的接收队列中查找该发送帧的确认信息帧,
确认已经收到信息帧。
具体的实现方式:网络通信这一块有两个独立线程(整个软件总共有大概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多毫秒才接收到信息帧。
我感觉这个现象很不正常,想请教各位问题的原因大概有哪些?可以从哪些方面去着手观察并优化?
...全文
相关推荐
python socket网络编程之粘包问题详解
"Python socket网络编程中的粘包问题详解,主要涉及TCP协议的特性与UDP协议的区别,以及粘包产生的原因和解决方案。"在计算机网络编程中,粘包问题主要出现在使用TCP协议进行数据传输
Java网络编程案例教程习题参考答案 .pdf
网络编程常见问题:Java网络编程中常见的问题包括网络连接问题、数据传输问题、网络安全问题等。Java程序员需要了解这些问题的解决方法和对策。7.
c#网络编程处理网络粘包问题
在计算机网络编程中,"粘包"问题是一个常见的现象,特别是在TCP协议中。TCP是一种面向连接的、可靠的传输层协议,它为了提高效率,会尽可能地将数据进行批量发送,而不是每次只发送一个数据包。
Python网络编程基础
通过学习本书,读者能够有效地解决实际开发中遇到的网络编程问题,并且在项目中实际应用这些技术,提高开发效率和程序性能。
利用C#网络编程技术,提高多媒体教室的使用效率 (2011年)
"利用C#网络编程技术,提高多媒体教室的使用效率 (2011年)"本文主要讨论了如何利用C#的网络编程技术来优化多媒体教室的管理效率。作者刘学勇和刘胜全针对多媒体教室的维护管理体系进行了深入分析,


