有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Netty同时提供10000个连接

我正在尝试使用Netty同时模拟10000个客户端到服务器的连接。当956客户端连接到服务器时,一切正常,但957客户端会导致错误异常

注意:我在同一台机器上运行服务器和客户端(win7 8GB ram,i7 CPU)

错误是:

java.lang.IllegalStateException: failed to create a child event loop
io.netty.channel.ChannelException: failed to open a new selector

我的代码:

try {
        con.connect();
    } catch (Exception e) {
        logger.error("Client: error connect to ip {} and port {}, ",id, ip, port,e);
        return;
    }

connect方法的代码是:

public void connect() {
    workerGroup = new NioEventLoopGroup();
    Bootstrap bs = new Bootstrap();
    bs.group(workerGroup).channel(NioSocketChannel.class);
    bs.handler(new ChannelInitializer<SocketChannel>() {
        @Override
        protected void initChannel(SocketChannel ch) throws Exception {
            ch.pipeline().addLast("idleStateHandler", new IdleStateHandler(0, 0, 300));
            ch.pipeline().addLast("idleStateActionHandler", new IdleStateEventHandler());
            ch.pipeline().addLast("logger", new LoggingHandler());
            ch.pipeline().addLast("commandDecoder", new CommandDecoder());
            ch.pipeline().addLast("commandEncoder", new CommandEncoder());
        }
    });

共 (1) 个答案

  1. # 1 楼答案

    每次连接调用都应该使用相同的NioEventLoopGroup实例。否则会创建很多线程