日期:2014-05-16  浏览次数:21036 次

linux socket buffer满了怎么办?
嵌入设设备和PC使用UDP通信,以太网发送数据很快,接收端的处理速度跟不上发送的速度,怎么处理呢?

已经尝试把socket buffer的空间设置成允许的最大值,空间相对于数据量来说杯水车薪,结果是后面的数据包都丢弃了。

有没有人遇到这种问题,请指点一二,谢谢。
Linux socket Buffer PC

------解决方案--------------------
1、发送端别发得太快;
2、接收端接收时候只做接收,可以存在一个buf,开启线程去处理buf中的数据。
------解决方案--------------------
发送端使用reactor方式,需要发送的数据存放于buffer中,socket可写时再做实际发送
接收端将业务线程与IO线程分离
------解决方案--------------------
包的大小不要大于MTU,也不要太小。不过这些好像都跟掉包没有关系。

1 可不可每次有接收信息过来就新开辟一个线程去处理这些消息
 
2 在UDP的基础上,添加应道模式,当全部收到信息后,发一个信令回去,发送端再发送数据
  (目前貌似QQ消息就是这个机制)
3 让发送端每次发送一个后等待一会(这样挺浪费的!) 

目前就想到这些