请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

netty客户端实践channel个数问题

老师:
netty应用于客户端,一般模板型的代码是创建一个NioEventLoopGroup对象即可,这个对象中默认线程数量是cpu*2.
我的疑惑是,一般在客户端的实战中,是创建一个包含NioEventLoopGroup的client对象,然后使用里面的channel进行数据发送,还是创建多个client对象,然后使用多个Client中的各自的channel进行发送?
如果是多个Client对象,那么每个channel还需要使用一个NioEventLoopGroup线程池吗?使用一个单线程可不可以?
老师,一般实际开发客户端程序(假设发送量很大),最佳实践是哪种模式?

伪代码是:
class Client{

	EventLoopGroup connectiontion = new NioEventLoopGroup();
    private Channel channel ;
    //创建client 并初始化channel
	public Channel Client(){
	 Bootstrap bootstrap = new Bootstrap();
        bootstrap.group(connectiontion);
        bootstrap.channel(NioSocketChannel.class);
        bootstrap.handler(new ChannelInitializer<SocketChannel>() {
            @Override
            protected void initChannel(SocketChannel socketChannel) throws Exception {
                consumer.accept(socketChannel.pipeline());
            }
        });
        ChannelFuture channelFuture = bootstrap.connect(serverIPAddress, port).sync();
        this.channel = channelFuture.channel();
}
  //关闭
  public void  closeClient(){connectiontion.shutdownGracefully();}

}

正在回答

1回答

Bootstrap,NioEventLoopGroup 相关的逻辑都是可以抽取出来的,每次只需要通过 bootstrap 的 connect 来创建客户端连接即可,你也可以考虑Netty自带的线程池,ChannelPool,具体用法在 Netty的源码里面有哦


0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信