2-Netty的HelloWorld案例

2-Netty的HelloWorld案例,第1张

2-Netty的HelloWorld案例

文章目录
  • 1. Netty是什么?
  • 2. Netty的Hello World案例
    • 2.1 创建Maven工程,引入Netty依赖
    • 2.2 实现服务端程序
    • 2.3 实现客户端程序
  • 3. Netty 中的重要概念理解

1. Netty是什么?

Netty 是一个基于事件驱动的非阻塞网络通信框架,使用Netty可以简化Java网络编程,构建出高性能的客户端、服务端网络应用…

2. Netty的Hello World案例 2.1 创建Maven工程,引入Netty依赖

	io.netty
	netty-all
	4.1.39.Final

2.2 实现服务端程序
public class HelloServer {
   public static void main(String[] args) {

       // 服务端启动器,负责组装netty组件,启动服务器
       new ServerBootstrap().
               // 加入一个事件循环组,循环处理连接,读,写等事件(比喻成事件处理的工人)
               group(new NioEventLoopGroup()).
               // 加入一个通用的 ServerSocketChannel(通道) 实现
               channel(NioServerSocketChannel.class).
               // 加入通道处理器,对通道中的事件进行处理
               childHandler(
                       // 初始化器(也是一个特殊的处理器),职责是去添加其他处理器
                       new ChannelInitializer() {
                   @Override// 建立连接后调用
                   protected void initChannel(NioSocketChannel ch) {
                       // 添加一个解码器,将传输过来的ByteBuf转换为字符串
                       ch.pipeline().addLast(new StringDecoder());
                       // 添加一个读事件处理器
                       ch.pipeline().addLast(new ChannelInboundHandlerAdapter() {
                           @Override
                           public void channelRead(ChannelHandlerContext ctx, Object msg) {
                               System.out.println("ctx: "+ctx);
                               System.out.println("msg: "+msg);
                           }
                       });
                   }
               }).
               // 设置服务端监听的端口
               bind(8080);
   }
}

2.3 实现客户端程序
public class HelloClient {
    public static void main(String[] args) throws InterruptedException {

        // 1. 启动器
        new Bootstrap().
                // 2.添加一个EventLoop(为了与服务端进行对应)
                group(new NioEventLoopGroup()).
                // 3.添加客户端Channel实现
                channel(NioSocketChannel.class).
                // 4.添加处理器
                handler(new ChannelInitializer() {
                    @Override
                    protected void initChannel(NioSocketChannel ch) {
                        // 5.在通道中添加编码处理器,该处理器将字符串转换成ByteBuf
                        ch.pipeline().addLast(new StringEncoder());
                    }
                }).
                // 6.与服务端建立连接
                connect(new InetSocketAddress("localhost", 8080)).
                sync().// 注意:此方法会同步阻塞,连接建立后才会向下执行
                channel().// 表示连接对象
                // 7.向服务端发送数据
                writeAndFlush("hello netty");
    }
}

分别启动服务端和客户端后在服务端控制台就能打印出客户端发送过来的Hello Netty字符串了…

3. Netty 中的重要概念理解

可以对照案例简单理解这几个概念,加深对Netty模型的认知,后续会深入学习Netty的相关组件

  • Bootstrap 启动器,负责组织装配netty组件并启动
  • EventLoopGroup 事件循环组,包含了若干事件循环对象
  • EventLoop 事件循环对象,是连接事件,IO读写事件,Handler逻辑的处理者
  • channel 连接通道,数据传输的通道
  • handler 处理器,表示一个处理步骤
  • pipeline 多个处理器组成了流水线

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5590598.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存