博客
关于我
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/

    你可能感兴趣的文章
    ndk特定版本下载
    查看>>
    NDK编译错误expected specifier-qualifier-list before...
    查看>>
    Neat Stuff to Do in List Controls Using Custom Draw
    查看>>
    Necurs僵尸网络攻击美国金融机构 利用Trickbot银行木马窃取账户信息和欺诈
    查看>>
    Needle in a haystack: efficient storage of billions of photos 【转】
    查看>>
    NeHe OpenGL教程 07 纹理过滤、应用光照
    查看>>
    NeHe OpenGL教程 第四十四课:3D光晕
    查看>>
    Neighbor2Neighbor 开源项目教程
    查看>>
    neo4j图形数据库Java应用
    查看>>
    Neo4j图数据库_web页面关闭登录实现免登陆访问_常用的cypher语句_删除_查询_创建关系图谱---Neo4j图数据库工作笔记0013
    查看>>
    Neo4j图数据库的介绍_图数据库结构_节点_关系_属性_数据---Neo4j图数据库工作笔记0001
    查看>>
    Neo4j图数据库的数据模型_包括节点_属性_数据_关系---Neo4j图数据库工作笔记0002
    查看>>
    Neo4j安装部署及使用
    查看>>
    Neo4j电影关系图Cypher
    查看>>
    Neo4j的安装与使用
    查看>>
    Neo4j(1):图数据库Neo4j介绍
    查看>>
    Neo4j(2):环境搭建
    查看>>
    Neo4j(3):Neo4j Desktop安装
    查看>>
    Neo4j(4):Neo4j - CQL使用
    查看>>
    Neo图数据库与python交互
    查看>>