免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2290 | 回复: 3

[C++] 求助:ACE网络并发一个socket经常失败影响其它吗 [复制链接]

论坛徽章:
0
发表于 2016-03-16 10:02 |显示全部楼层
现状:ACE写的server,用ACE_Event_Handler。其中一个客户端的网络很差,发送给该客户端经常10035,导致发送给其它客户端的数据也不正常。数据量比较大。但是如果此客户端不登陆,就没有这种问题。
server给客户端的协议发送用的peer.send();
server循环发送给每个客户端的数据,用的是ACE::send()
非阻塞和超时2种方式都试过,效果基本相同,非阻塞也就是立即返回,超时也就是1毫秒返回。
可以模拟这种客户端,即给该客户端限速,很小,比如100k之类的,就能达到这种效果。

问题:对一个客户端的socket发送经常失败,会影响对其它socket的发送吗?会影响服务器网卡的性能吗?为什么在客户端网速很差的情况下会出现这种问题?怎么解决?

设想1:发送之前先检查此socket是否可写。有这个函数吗?有没有必要?因为ACE::send可以返回成功或者失败
设想2:是否可以对客户端发送失败的情况做一下记录,如果达到一定程度,就丢一部分数据;如果还丢,就断掉此连接。
哪种可行?有没有更好的方法?关键是不知道这种问题为什么会产生,望指教

论坛徽章:
1
射手座
日期:2014-08-04 16:49:43
发表于 2016-03-16 10:59 |显示全部楼层
看吧, 想用框架 用的不熟就有了这种尴尬,  TCP Send 对端长时间数据不接受会影响到 发送缓冲区,从而间接影响到socket工作效率;

论坛徽章:
0
发表于 2016-03-16 11:07 |显示全部楼层
回复 2# hanzhenlll

单个socket接收端不接收,会影响发送端所有socket的发送缓冲区?什么原理呢?已经设置了发送缓冲区大小了,它不是只守着自己的地盘吗?
怎么才能解决呢?
   

论坛徽章:
0
发表于 2016-03-18 08:48 |显示全部楼层
ACE_Sock_Stream能设置socket之间互不影响吗?现在是虽然设置了缓冲区,但是一个堵住了,整台服务器的网络都挂了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

ITPUB技术栈

ITPUB技术栈:http://z.itpub.net/
ITPUB技术栈是由ITPUB社区打造的垂直于IT领域的知识交流平台,在这里,你既可以是创作者也可以是消费者。如果你的IT生涯丰富多彩,喷薄的个人价值尽可在小栈内体现;如果你渴望找到志同道合的伙伴,拓宽人脉,小栈会是你最好的选择。





点击进入>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP