nettyの学習ノート1

3996 ワード

nettyのメモ
netty入門demo
Nettyサービス側のコードimport io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioServerSocketChannel;
public class Server { public static void main(String[] args) throws Exception {
  EventLoopGroup bossGroup  =new NioEventLoopGroup();
  EventLoopGroup workGroup  =new NioEventLoopGroup();

  ServerBootstrap bootstrap=new ServerBootstrap();

  bootstrap.group(bossGroup, workGroup);
  bootstrap.channel(NioServerSocketChannel.class);
  bootstrap.option(ChannelOption.SO_BACKLOG, 128)
  .option(ChannelOption.SO_SNDBUF, 32*1024) // 
  .option(ChannelOption.SO_RCVBUF, 32*1024)
  .childOption(ChannelOption.SO_KEEPALIVE, true)
  .childHandler(new ChannelInitializer() {

    protected void initChannel(SocketChannel sc) throws Exception {
        sc.pipeline().addLast(new ServerHandler());
    }
   });
  ChannelFuture cf=bootstrap.bind(9876).sync();
  cf.channel().closeFuture().sync();
  bossGroup.shutdownGracefully();
  workGroup.shutdownGracefully();

} }
nettyサービス側のhandler import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerAdapter; import io.netty.channel.ChannelHandlerContext; import io.netty.util.ReferenceCountUtil;
public class ServerHandler extends ChannelHandlerAdapter {
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
   try{
        ByteBuf buf=(ByteBuf)msg;
        byte[] bytes=new byte[buf.readableBytes()];
        buf.readBytes(bytes);
        String req=new String(bytes);
        System.out.println(" "+req);
        ctx.writeAndFlush(Unpooled.copiedBuffer(req.getBytes()));

    }finally {
        ReferenceCountUtil.release(msg);
    }
}

@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
    ctx.close();
}

Nettyクライアントのコードimport io.netty.bootstrap.Bootstrap; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioSocketChannel;
public class Client { public static void main(String[] args) throws Exception { EventLoopGroup group = new NioEventLoopGroup(); Bootstrap bootstrap=new Bootstrap(); bootstrap.group(group) .channel(NioSocketChannel.class) .handler(new ChannelInitializer() { @Override protected void initChannel(SocketChannel sc) throws Exception { sc.pipeline().addLast(new ClientHandler()); } });
   ChannelFuture cf=bootstrap.connect("127.0.0.1",9876).sync();
   cf.channel().writeAndFlush(Unpooled.copiedBuffer("111111111111".getBytes()));
   cf.channel().closeFuture().sync();
   group.shutdownGracefully();

}

}
Nettyクライアントのhandler import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerAdapter; import io.netty.channel.ChannelHandlerContext; import io.netty.util.ReferenceCountUtil;
public class ClientHandler extends ChannelHandlerAdapter{
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
    try{
        ByteBuf buf=(ByteBuf)msg;
        byte[] buffer=new byte[buf.readableBytes()];
        buf.readBytes(buffer);
        String message=new String(buffer);
        System.out.println(message);
    }finally {
        ReferenceCountUtil.release(msg);
    }
}

@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
    ctx.close();
}

}