启动mina2.0服务以后,会建立多个链接(tcp)
问题描述:我建了一个简单的mina2.0应用,在win xp上启动以后发现会在系统上占用多个端口。在linux上则因为建立过多链接无法启动。
mina所用的版本:mina-*-2.0.0-RC1 系列jar包
代码:
Java code
import 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 通道。