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

    你可能感兴趣的文章
    netty——bytebuf的创建、内存分配与池化、组成、扩容规则、写入读取、内存回收、零拷贝
    查看>>
    netty——Channl的常用方法、ChannelFuture、CloseFuture
    查看>>
    netty——EventLoop概念、处理普通任务定时任务、处理io事件、EventLoopGroup
    查看>>
    netty——Future和Promise的使用 线程间的通信
    查看>>
    netty——Handler和pipeline
    查看>>
    Vue输出HTML
    查看>>
    netty——黏包半包的解决方案、滑动窗口的概念
    查看>>
    Netty中Http客户端、服务端的编解码器
    查看>>
    Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息
    查看>>
    Netty中实现多客户端连接与通信-以实现聊天室群聊功能为例(附代码下载)
    查看>>
    Netty中的组件是怎么交互的?
    查看>>
    Netty中集成Protobuf实现Java对象数据传递
    查看>>
    netty之 定长数据流处理数据粘包问题
    查看>>
    Netty事件注册机制深入解析
    查看>>
    netty代理
    查看>>
    Netty入门使用
    查看>>
    netty入门,入门代码执行流程,netty主要组件的理解
    查看>>
    Netty原理分析及实战(一)-同步阻塞模型(BIO)
    查看>>
    Netty原理分析及实战(三)-高可用服务端搭建
    查看>>
    Netty原理分析及实战(二)-同步非阻塞模型(NIO)
    查看>>