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

    你可能感兴趣的文章
    n = 3 , while n , continue
    查看>>
    n 叉树后序遍历转换为链表问题的深入探讨
    查看>>
    N-Gram的基本原理
    查看>>
    n1 c语言程序,全国青少年软件编程等级考试C语言经典程序题10道七
    查看>>
    nacos config
    查看>>
    Nacos Derby 远程命令执行漏洞(QVD-2024-26473)
    查看>>
    Nacos 与 Eureka、Zookeeper 和 Consul 等其他注册中心的区别
    查看>>
    Nacos 单机集群搭建及常用生产环境配置 | Spring Cloud 3
    查看>>
    Nacos2.X 配置中心源码分析:客户端如何拉取配置、服务端配置发布客户端监听机制
    查看>>
    NacosClient客户端搭建,微服务注册进nacos
    查看>>
    Nacos使用OpenFeign
    查看>>
    Nacos使用Ribbon
    查看>>
    Nacos做注册中心使用
    查看>>
    Nacos做配置中心使用
    查看>>
    Nacos原理
    查看>>
    Nacos发布0.5.0版本,轻松玩转动态 DNS 服务
    查看>>
    Nacos启动异常
    查看>>
    Nacos和Zookeeper对比
    查看>>
    Nacos在双击startup.cmd启动时提示:Unable to start embedded Tomcat
    查看>>
    Nacos如何实现Raft算法与Raft协议原理详解
    查看>>