当前位置: 技术问答>linux和unix
###请教高手:UDP scocket传输策略的难题###up有分
来源: 互联网 发布时间:2015-10-01
本文导语: 我们现在有一段程序负责向服务器发送UDP包,这段程序被动等待其他程序的发送事件,在事件响应中通过UDP sock向服务器发送数据,为了提高效率,我们在这段程序中引入了一些缓冲机制,就是没凑够一定大小的Packet...
我们现在有一段程序负责向服务器发送UDP包,这段程序被动等待其他程序的发送事件,在事件响应中通过UDP sock向服务器发送数据,为了提高效率,我们在这段程序中引入了一些缓冲机制,就是没凑够一定大小的Packet(比如8K),再向外发送。但是这种机制存在问题,如果最后一批数据凑不够Packet要求的大小,就永远不会被发送;而这段代码被动等待事件,无法知道当前缓存的数据是否是最后一批,而且其他程序结束时,这段代码也会被结束,所以即使使用定时机制也不保险。
请教各位高手,有没有办法保证最后一批数据也能正常发出,不管最后剩的数据是否达到一个Packet的大小?有没有尽量少改动原来代码的办法?
非常感谢!
请教各位高手,有没有办法保证最后一批数据也能正常发出,不管最后剩的数据是否达到一个Packet的大小?有没有尽量少改动原来代码的办法?
非常感谢!
|
用atexit注册一个程序退出的时候执行发送函数行不行?
|
加包结束标志
|
加标志位,如果是最后一批数据则直接发送,否则等待接收满8K再发送
|
加个定时器好了!如果10秒不够 也发送 ok
|
启动发送程序的时候开一个线程,作定时检查,用线程来释放发送程序。
|
另外再做一个监控进程,当所有其它的进程退出后,监控进程扫描缓冲区,有则发出去
|
用冗余数据把他凑够8k不就行了,类似arp协议就是用很多没实际用途的字符凑够64byte,因为arp协议也是不凑够64 byte不能发送。
|
除非语音
udp 一般就是发送短小数据 一个报文一条信息 而且好像在一定发送频率范围内 也没有明显的效率降低问题
udp 一般就是发送短小数据 一个报文一条信息 而且好像在一定发送频率范围内 也没有明显的效率降低问题
|
既然是被动,可以叫主动发给它的sock发一个标志给它,告诉它下一个是最后一个包就行了
|
这个简单,你们发的包大小都是固定的把。你可以取一个各种包长度的最大公约数做缓冲大小。或者缓冲区大小动态可变。
我觉得奇怪你们设计的时候没有考虑过这个问题吗?那么你们设计的时候想的是什么?
我觉得奇怪你们设计的时候没有考虑过这个问题吗?那么你们设计的时候想的是什么?