新闻中心

EEPW首页 > 手机与无线通信 > 设计应用 > VxWorks下基于缓冲队列的网络通信

VxWorks下基于缓冲队列的网络通信

作者: 时间:2010-04-09 来源:网络 收藏
具体表现为,消息初始为空,数据发送任务阻塞在消息上,网络正常情况下,每有新的消息单元到达时,数据发送任务就将该消息单元指向的数据包立刻发送出去;如果某个时刻网络受到外界环境的影响变地不稳定或发生短暂阻塞,数据包不能及时发出,该数据包就可缓存在 Buffer中,其地址信息缓存在消息中,而不会丢失,等网络正常后再发送出去。队列的模式如图 3所示。根据待传输信息的紧急程度,不同的任务可以选择 FIFO或优先级向缓存队列中写入消息单元。

本文引用地址:https://www.eepw.com.cn/article/157520.htm


实验时,以一台普通 PC机作为上位机服务器,采样节点和服务器之间通过一个百兆的机相连。采样节点的所有采集通道全开,均设为最大采样率,服务器每隔 5秒钟查询一次节点状态,此时数据传输率约为 65Mbit/s,系统连续运行 8小时。实验结果显示服务器收到的数据包数目和采样节点发送的数据包数目相同,数据传输丢失率为 0.0%。

4网络监测原理

当网络发生中断时,系统软件应该能够尽快发现网络故障,并在网络恢复后仍可正常运行,因此软件应该具备网络监控功能,实时监测网络的连通性。监测网络连通性的一个比较简单的方法就是通过服务器向采样节点不间断发送 ICMP(Internet控制消息协议 )包,如果能收到回应则证明网络连通,反之则表示网络中断。此法虽然简单,但是当节点比较多时,大量的 ICMP数据包会占用 CPU资源,降低服务器的效率,故此法不可行。图 4是我们设计的一个网络监控原理图。




为避免影响到数据的实时传输,通信双方各建立两个 socket端口,一个作为数据通道专门用来传递数据信息,另一个用作监控通道,传递应答信号,监测网络的连通性;监控通道负责管理和维护数据通道。节点和服务器端运行的监控任务都是无限循环任务,每若干秒运行一次。在每一个循环周期内,采样节点都会向服务器发起一次连接,服务器端收到采样节点的连接请求后,和其建立连接,然后向其发送信号指令。采样节点收到信号指令后,向服务器发送应答信号,服务器若能在 T_wait时间内收到应答信号,则判定网络通畅,否则认为网络中断。如果某时刻网络出现断线,那么重新建立连接后,服务器会向采样节点发送重新连接指令,采样节点收到重新连接指令后,会关闭原有的数据传输 socket,重新和服务器建立数据传输通道。


实验时,通过插拔网线模拟网络的连通和断线。结果表明,在系统进行数据传输时拔掉网线,若在 20秒内再接上,由于采样节点具有一定的缓存能力,数据不会丢失,网络仍可正常工作;若拔掉网线,超过 20秒之后再接上网线,采样节点和服务器之间会重新建立连接,网络仍可正常工作,但由于缓存队列溢出,数据会发生丢失;若拔掉网线超过 30分钟,采样节点会判定网络中断、记录故障并自动关闭系统,插上网线后,服务器通过网络远程启动采样节点,系统继续正常工作。

5总结

利用 对多任务和网络的良好支持,本文提出了一种队列的带网络状态监测功能的模式,目前已经在我们开发的分布式监控系统中得到应用。该模式使系统能够应付一定的网络故障,提高了系统的可靠性。该模式还可以方便地应用到其它嵌入式网络开发中,具有广泛的应用前景。本文作者创新点:本文提出的这种基于队列的带网络状态监测功能的网络通信模式,充分地利用了 对多任务和网络的良好支持,消息队列不仅同步任务,还可作为缓存队列用来缓存数据,使系统能够应付一定的网络波动;监控任务的工作模式使系统能够快速发现网络故障并做出响应,待网络故障排除后仍可正常运行。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭