netty 4.0.27 获得复用的channel

  EventLoopGroup group = new NioEventLoopGroup();
        try {
            Bootstrap b = new Bootstrap();
            b.group(group);
            b.channel(NioSocketChannel.class);
            b.remoteAddress(new InetSocketAddress(host, port));
            b.handler(new ChannelInitializer<SocketChannel>() {

                public void initChannel(SocketChannel ch) throws Exception {
                	ch.pipeline().addLast(new StringDecoder());
                	//ch.pipeline().addLast(new StringEncoder());
                    ch.pipeline().addLast(new EchoClientHandler());
                }
            });
            b.option(ChannelOption.SO_KEEPALIVE, true);
            b.option(ChannelOption.TCP_NODELAY, true);
            ChannelFuture f = b.connect().sync();
            channel=f.channel();
            f.addListener(new ChannelFutureListener() {

                public void operationComplete(ChannelFuture future) throws Exception {
                    if(future.isSuccess()){
                        System.out.println("client connected");
                    }else{
                        System.out.println("server attemp failed");
                        future.cause().printStackTrace();
                    }
                }
            });

           // f.channel().closeFuture().sync();
        } finally {
            //group.shutdownGracefully().sync();
        }

其中注释那两段一定不能调用,只有在彻底不用channel的时候调用。

利用得到的channel发送数据:

for(int k=0;k<100000;k++){
	    	ChannelFuture cfu=c.channel.writeAndFlush(Unpooled.copiedBuffer("Netty rocks!"+k, CharsetUtil.UTF_8));
	    	if(cfu!=null){
	    		cfu.sync();
	    	}
    	}

最后三行是很重要的,因为channel 写进通道以后sync 才会将其发送出去。

先写这么多吧。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。