博客
关于我
netty入门,入门代码执行流程,netty主要组件的理解
阅读量:796 次
发布时间:2023-02-14

本文共 3329 字,大约阅读时间需要 11 分钟。

Netty入门指南:从零到熟练

Netty是一个高性能的异步I/O框架,基于NIO技术,适用于处理高并发的网络通信场景。作为一个热门的网络框架,Netty的学习对于Java程序员来说非常有帮助。本文将从零开始,带你逐步了解Netty的核心概念,学习如何编写服务器端和客户端代码,以及Netty的工作原理。

第一步:导入依赖

使用Netty之前,需要先将它的JAR包添加到项目中。可以通过以下Maven依赖来完成:

io.netty
netty-all
4.1.39.Final

第二步:创建服务器端代码

Netty服务器端的代码实现相对简单。以下是一个完整的服务器端示例:

package com.hs.nettyPrimary;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelHandlerContext;import io.netty.channel.ChannelInboundHandlerAdapter;import io.netty.channel.ChannelInitializer;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.nio.NioServerSocketChannel;public class HelloServer {    public static void main(String[] args) {        new ServerBootstrap()            .group(new NioEventLoopGroup())            .channel(NioServerSocketChannel.class)            .childHandler(new ChannelInitializer
() { @Override protected void initChannel(NioSocketChannel ch) throws Exception { ch.pipeline().addLast(new StringDecoder()); ch.pipeline().addLast(new ChannelInboundHandlerAdapter() { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { System.out.println("客户端接收的参数" + msg); } }); } }) .bind(8080); }}

服务器端的实现步骤如下:

  • 创建一个ServerBootstrap启动器。
  • 添加一个NioEventLoopGroup事件循环组。
  • 设置服务器的Channel实现为NioServerSocketChannel
  • 添加一个ChannelInitializer,用于配置服务器接受到的连接的处理逻辑。
  • 绑定一个端口(例如8080)开始监听。
  • 第三步:创建客户端代码

    客户端的实现与服务器端非常相似。以下是一个完整的客户端示例:

    package com.hs.nettyPrimary;import io.netty.bootstrap.Bootstrap;import io.netty.channel.ChannelHandlerContext;import io.netty.channel.ChannelInboundHandlerAdapter;import io.netty.channel.ChannelInitializer;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.nio.NioSocketChannel;import io.netty.handler.codec.string.StringDecoder;import io.netty.handler.codec.string.StringEncoder;public class HelloClient {    public static void main(String[] args) throws InterruptedException {        new Bootstrap()            .group(new NioEventLoopGroup())            .channel(NioSocketChannel.class)            .handler(new ChannelInitializer
    () { @Override protected void initChannel(NioSocketChannel ch) throws Exception { ch.pipeline().addLast(new StringEncoder()); } }) .connect("localhost", 8080) .sync() .channel() .writeAndFlush("hello,netty!"); }}

    客户端的实现步骤如下:

  • 创建一个Bootstrap启动器。
  • 添加一个NioEventLoopGroup事件循环组。
  • 设置客户端的Channel实现为NioSocketChannel
  • 添加一个ChannelInitializer,用于配置客户端发送数据的处理逻辑。
  • 连接到服务器地址和端口(例如"localhost:8080")。
  • 同步等待连接建立。
  • 发送数据并立即刷新。
  • Netty的工作原理

    Netty的核心组件包括:

  • 消息(Message):可以理解为数据流,服务器端接收的是ByteBuf,客户端发送的是ByteBuf
  • 通道(Channel):数据的传输通道。
  • 处理器(Handler):处理数据的工序,包括入站和出站处理器。处理器通过pipeline传播事件,自定义处理器可以重写事件处理方法。
  • 事件循环(EventLoop):处理数据的工人,所有的IO操作都由工人完成。工人可以管理多个Channel,每个工人负责一个Channel的IO操作。
  • 事件处理流程

  • 数据到达网络接口后,会被传递给EventLoop
  • EventLoop将事件传播给所有注册的Handler
  • 每个Handler根据事件类型执行相应的处理逻辑。
  • 处理器的执行顺序由pipeline决定。
  • 通过上述步骤,我们可以清晰地了解Netty的核心组件及其工作原理。掌握了服务器端和客户端的编写方法后,接下来的学习可以重点关注Netty的高级功能,如数据序列化、压缩、加密、Websocket支持等,逐步提升自己的Netty开发能力。

    转载地址:http://eccfk.baihongyu.com/

    你可能感兴趣的文章
    MySQL高级-MySQL查询缓存优化
    查看>>
    MySQL高级-MySQL锁
    查看>>
    MySQL高级-SQL优化
    查看>>
    MySQL高级-SQL优化步骤
    查看>>
    MySQL高级-内存管理及优化
    查看>>
    MySQL高级-索引的使用及优化
    查看>>
    MySQL高级-视图
    查看>>
    MySQL高级-触发器
    查看>>
    mysql高级查询~分页查询
    查看>>
    MySQL高频面试题
    查看>>
    MySQL高频面试题的灵魂拷问
    查看>>
    MySQL(2)DDL详解
    查看>>
    Mysql,sql文件导入和导出
    查看>>
    MYSQL:int类型升级到bigint,对PHP开发语言影响
    查看>>
    Mysql:mysql 5.X 报错 ERROR 1193 (HY000): Unknown system variable ‘validate_password_length‘
    查看>>
    MySQL:MySQL执行一条SQL查询语句的执行过程
    查看>>
    Mysql:SQL性能分析
    查看>>
    mysql:SQL按时间查询方法总结
    查看>>
    MySQL:什么样的字段适合加索引?什么样的字段不适合加索引
    查看>>
    MySQL:判断逗号分隔的字符串中是否包含某个字符串
    查看>>