博客
关于我
netty入门,入门代码执行流程,netty主要组件的理解
阅读量:791 次
发布时间: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/

    你可能感兴趣的文章
    NAT网络地址转换配置详解
    查看>>
    navbar navbar-inverse 导航条设置颜色
    查看>>
    Navicat for MySQL 命令列 执行SQL语句 历史日志
    查看>>
    Navicat for MySQL 查看BLOB字段内容
    查看>>
    Navicat for MySQL笔记1
    查看>>
    Navicat for MySQL(Ubuntu)过期解决方法
    查看>>
    Navicat Premium 12 卸载和注册表的删除
    查看>>
    Navicat 导入sql文件
    查看>>
    navicat 添加外键1215错误
    查看>>
    navicat 系列软件一点击菜单栏就闪退
    查看>>
    navicat 自动关闭_干掉Navicat!MySQL官方客户端到底行不行?
    查看>>
    Navicat 设置时间默认值(当前最新时间)
    查看>>
    navicat 连接远程mysql
    查看>>
    navicat:2013-Lost connection to MySQL server at ‘reading initial communication packet解决方法
    查看>>
    Navicate for mysql 数据库设计-数据库分析
    查看>>
    Navicat下载和破解以及使用
    查看>>
    Navicat中怎样将SQLServer的表复制到MySql中
    查看>>
    navicat创建连接 2002-can‘t connect to server on localhost(10061)且mysql服务已启动问题
    查看>>
    Navicat可视化界面导入SQL文件生成数据库表
    查看>>
    Navicat向sqlserver中插入数据时提示:当 IDENTITY_INSERT 设置为 OFF 时,不能向表中的标识列插入显式值
    查看>>