启动mina2.0服务以后,会建立多个链接(tcp)问题描述:我建了一个简单的mina2.0应用,在win xp上启动以后发现
启动mina2.0服务以后,会建立多个链接(tcp)
问题描述:我建了一个简单的mina2.0应用,在win xp上启动以后发现会在系统上占用多个端口。在linux上则因为建立过多链接无法启动。
mina所用的版本:mina-*-2.0.0-RC1 系列jar包
代码:
Java codeimport java.io.IOException;import java.net.InetSocketAddress;import org.apache.mina.filter.codec.ProtocolCodecFilter;import org.apache.mina.transport.socket.nio.NioSocketAcceptor;import cn.com.beapp.server.common.MessageCodecFactory;public class TestServer { public static void main(String[] args) { NioSocketAcceptor acceptor = new NioSocketAcceptor(); try { acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new MessageCodecFactory())); acceptor.setHandler(new TestHandle()); acceptor.getSessionConfig().setReadBufferSize(1024 * 20); acceptor.getSessionConfig().setSendBufferSize(1024 * 20); acceptor.getSessionConfig().setReceiveBufferSize(1024 * 20); acceptor.bind(new InetSocketAddress(10001)); } catch (IOException e) { } }}//相关Handle类import org.apache.mina.core.service.IoHandlerAdapter;public class TestHandle extends IoHandlerAdapter { }
启动后的netstat状态:
C:\Documents and Settings\Administrator>netstat
Active Connections
Proto Local Address Foreign Address State
TCP LIZHOU:5098 localhost:5099 ESTABLISHED
TCP LIZHOU:5099 localhost:5098 ESTABLISHED
TCP LIZHOU:5100 localhost:5101 ESTABLISHED
TCP LIZHOU:5101 localhost:5100 ESTABLISHED
TCP LIZHOU:5102 localhost:5103 ESTABLISHED
TCP LIZHOU:5103 localhost:5102 ESTABLISHED
TCP LIZHOU:5104 localhost:5105 ESTABLISHED
TCP LIZHOU:5105 localhost:5104 ESTABLISHED
TCP LIZHOU:2695 219.133.62.2:http ESTABLISHED
TCP LIZHOU:3649 219.133.62.2:http CLOSE_WAIT
TCP LIZHOU:4547 219.133.62.2:http CLOSE_WAIT
TCP LIZHOU:4784 121.14.11.70:http CLOSE_WAIT
TCP LIZHOU:4854 bg-in-f104.1e100.net:http CLOSE_WAIT
C:\Documents and Settings\Administrator>
启用前的netstat状态:
C:\Documents and Settings\Administrator>netstat
Active Connections
Proto Local Address Foreign Address State
TCP LIZHOU:2695 219.133.62.2:http ESTABLISHED
TCP LIZHOU:3649 219.133.62.2:http CLOSE_WAIT
TCP LIZHOU:4547 219.133.62.2:http CLOSE_WAIT
TCP LIZHOU:4784 121.14.11.70:http CLOSE_WAIT
TCP LIZHOU:4854 bg-in-f104.1e100.net:http CLOSE_WAIT
C:\Documents and Settings\Administrator>
请各位路过的高手看看,帮忙解答,有高分相赠哦。谢谢!
[解决办法]netstat -o 看哪个进程
[解决办法]楼主看一下专家的那两篇文章吧:Java NIO类库Selector机制解析(上、下)
http://blog.csdn.net/haoel/archive/2008/03/27/2224055.aspx
http://blog.csdn.net/haoel/archive/2008/03/27/2224069.aspx
[解决办法]你用的是 Mina 2.0RC 版吧,刚才看了一下 Mina 的源代码。在 Mina 中会根据服务器处理器 + 1 的数量来创建NioProcessor 而 JDK 中的 Windows 的 NIO 实现需要使用一对互联的端口进行通知之用。
如果要减小这个数量的话,可以指定处理器的数量,使用 NioSocketAcceptor 带有 int 参数的构造,比如传个 1 进去(这是最小值了)。这时 NioProcessor 将使用一个 Selector 通道。但是 NioSocketAcceptor 中也有一个 Selector 通道。因此在 MINA 中最少得有两个 Selector 通道,在 Windows NIO 中会建立两对互联的 TCP 通道。
[解决办法]
根据 3 楼的那篇文章,Java NIO 在 Windows 版本的实现中一个 Selector 对应着一对回环的 TCP 通道,在 Linux 中使用的是 pipe,这些是用于 Selector 通道之用的。
作为 NIO 的使用者来说,对于这一点来说我们没有其他的办法。