linux. tcp长连接代码,关于TCP网络连接的短连接和长连接
有一个JAVA系统,系统的几个进程间有大量的数据传送,基于的是TCP连接。这个系统在小压力的情况下工作正常,但是处理能力一直上不去。最近对这个系统进行压力测试,在进程间发送数据时出现exception : Address already in use: connect。查发送数据的源代码,发现发送者采用的是短连接模型--每次发送时,都重新与接收者建立新连接。于是立即修改发送侧代码为长连接方式,并重
有一个JAVA系统,系统的几个进程间有大量的数据传送,基于的是TCP连接。这个系统在小压力的情况下工作正常,但是处理能力一直上不去。最近对这个系统进行压力测试,在进程间发送数据时出现exception : Address already in use: connect。
查发送数据的源代码,发现发送者采用的是短连接模型--每次发送时,都重新与接收者建立新连接。
于是立即修改发送侧代码为长连接方式,并重做压力测试,结果没有再出现这个异常,而且CPU占用率也降下来了一截。
如果理解TCP/IP连接的原理,对于在短连接方式下异常出现的原因也就不足为怪了:每次发送时,client都建立连接,发送完毕就断开连接。断开连接是要花一些时间的。如果再次发起连接太快,可能会由于资源未准备好而失败。
测试时是在WINDOWS平台上进行的,于是从MSDN上贴了一段错误解释:
connect()
WSAEADDRINUSE The socket's local address is already in use and the socket was not marked to allow address reuse with SO_REUSEADDR. This error usually occurs when executing bind, but could be delayed until this function if the bind was to a partially wildcard address (involving ADDR_ANY) and if a specific address needs to be committed at the time of this function.
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)