首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

启动mina2.0服务以后,会建立多个链接(tcp)解决方案

2012-05-24 
启动mina2.0服务以后,会建立多个链接(tcp)问题描述:我建了一个简单的mina2.0应用,在win xp上启动以后发现

启动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 通道。


[解决办法]
根据 3 楼的那篇文章,Java NIO 在 Windows 版本的实现中一个 Selector 对应着一对回环的 TCP 通道,在 Linux 中使用的是 pipe,这些是用于 Selector 通道之用的。

作为 NIO 的使用者来说,对于这一点来说我们没有其他的办法。

热点排行