Java教程:Netty知识点详解(五)

开课吧开课吧锤锤2021-02-23 14:35

近年来,随着云计算、大数据等热门技术的发展和普及,Java在企业中越来越受到重视,公司对于Java人才需求也是每年都在增长,对于这样热门的行业,很多人都是心动的,那么对于如何学习,怎么提高Java的技术,那就来看看本篇文章吧。

Netty 源码阅读

源码阅读,最好可以再 Debug 的情况下进行,这样更容易帮助理解,因此在分析 Netty 前的我准备一个客户端和服务端的代码。

Netty - Server 代码

public class NettyServer {

    public static void main(String[] args) throws InterruptedException {

        EventLoopGroup parentGroup = new NioEventLoopGroup();

        EventLoopGroup childGroup = new NioEventLoopGroup();

        try {

 

            ServerBootstrap bootstrap = new ServerBootstrap();

            bootstrap.group(parentGroup, childGroup)

                     .channel(NioServerSocketChannel.class)

                     .childHandler(new ChannelInitializer<SocketChannel>() {

 

                        @Override

                        protected void initChannel(SocketChannel ch) throws Exception {

 

                            ChannelPipeline pipeline = ch.pipeline();

                            pipeline.addLast(new StringDecoder());

                            pipeline.addLast(new StringEncoder());

                            pipeline.addLast(new SomeSocketServerHandler());

                         }

                    });

            ChannelFuture future = bootstrap.bind(8888).sync();

            System.out.println("服务器已启动。。。");

            future.channel().closeFuture().sync();

        } finally {

            parentGroup.shutdownGracefully();

            childGroup.shutdownGracefully();

        }

    }

}

Server 端 Handler:

public class DemoSocketServerHandler

                       extends ChannelInboundHandlerAdapter {

    @Override

    public void channelRead(ChannelHandlerContext ctx, Object msg)

            throws Exception {

        System.out.println("Client Address ====== " + ctx.channel().remoteAddress());

        ctx.channel().writeAndFlush("from server:" + UUID.randomUUID());

        ctx.fireChannelActive();

        TimeUnit.MILLISECONDS.sleep(500);

    }

    @Override

    public void exceptionCaught(ChannelHandlerContext ctx,

                                Throwable cause) throws Exception {

        cause.printStackTrace();

        ctx.close();

    }

}

Netty - Client 代码

public class NettyClient {

    public static void main(String[] args) throws InterruptedException {

        NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();

        try {

            Bootstrap bootstrap = new Bootstrap();

            bootstrap.group(eventLoopGroup)

                    .channel(NioSocketChannel.class)

                    .handler(new ChannelInitializer<SocketChannel>() {

                        @Override

                        protected void initChannel(SocketChannel ch) throws Exception {

                            ChannelPipeline pipeline = ch.pipeline();

                            pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));

                            pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));

                            pipeline.addLast(new DemoSocketClientHandler());

                        }

                    });

            ChannelFuture future = bootstrap.connect("localhost", 8888).sync();

            future.channel().closeFuture().sync();

        } finally {

            if(eventLoopGroup != null) {

                eventLoopGroup.shutdownGracefully();

            }

        }

    }

}

Client 端 Handler :

public class DemoSocketClientHandler

               extends ChannelInboundHandlerAdapter {

    @Override

    public void channelRead(ChannelHandlerContext ctx, Object msg)

            throws Exception {

        System.out.println(msg);

        ctx.channel().writeAndFlush("from client: " + System.currentTimeMillis());

        TimeUnit.MILLISECONDS.sleep(5000);

    }

    @Override

    public void channelActive(ChannelHandlerContext ctx)

            throws Exception {

        ctx.channel().writeAndFlush("from client:begin talking");

    }

    @Override

    public void exceptionCaught(ChannelHandlerContext ctx,

                                Throwable cause) throws Exception {

        cause.printStackTrace();

        ctx.close();

    }

}

以上内容由开课吧老师敖丙提供,更多Java教程尽在开课吧广场Java教程频道。更多免费课程可以关注公众号码农集散地”

有用
分享