首页 > 其他分享 >netty底层实现是什么样的

netty底层实现是什么样的

时间:2023-08-21 12:55:36浏览次数:35  
标签:netty ChannelHandler Netty 什么样 io import channel 底层

  

        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.90.Final</version>
        </dependency>

Netty是一个高性能的网络编程框架,它提供了一种简单、高效的方式来开发可扩展的网络应用程序。Netty的底层实现主要基于Java NIO(New I/O)的非阻塞事件驱动模型。

在底层,Netty通过以下几个核心组件实现了高性能的网络通信:

 

  1. Channel(通道):Channel是Netty的核心抽象,它表示一个开放的连接,可以执行读取、写入和关闭等操作。Netty中的Channel提供了异步的I/O操作和事件通知机制。

  2. EventLoop(事件循环):EventLoop是Netty中的事件处理机制,它负责处理和分发事件,以及执行对应的I/O操作。每个Channel都关联了一个EventLoop,它负责处理该Channel上的所有事件。

  3. ChannelPipeline(通道管道):ChannelPipeline是Netty中的处理器链,它由一系列的处理器组成,用于处理、转换或拦截事件和数据。每个Channel都有自己的ChannelPipeline,事件在Pipeline中依次经过处理器进行处理。

  4. ChannelHandler(通道处理器):ChannelHandler是Netty中的处理器,用于执行实际的业务逻辑。它可以处理事件、读取和写入数据,以及修改ChannelPipeline。

  5. ByteBuf(字节缓冲区):ByteBuf是Netty中的字节容器,它提供了高效的字节操作方法,用于读取和写入数据。

Netty的底层实现利用了Java NIO的非阻塞I/O模型,通过Selector轮询事件,将I/O操作异步化并交给EventLoop处理。这种事件驱动的模型使得Netty能够处理大量并发连接,同时提供低延迟和高吞吐量的网络通信。

 

Netty的基本使用步骤如下:

  1. 引入Netty依赖:在你的项目中添加Netty的依赖项。你可以在构建工具(如Maven或Gradle)的配置文件中添加相应的依赖项,以便从中央仓库下载Netty库。

  2. 创建ServerBootstrap(服务器端)或Bootstrap(客户端)实例:根据你的应用类型创建相应的引导类实例。ServerBootstrap用于创建服务器端应用程序,而Bootstrap用于创建客户端应用程序。

  3. 配置引导类:通过设置相关选项和属性来配置引导类。这包括设置监听端口、添加处理器、设置事件循环组等。

  4. 添加ChannelHandler(通道处理器):创建并添加你的自定义ChannelHandler到ChannelPipeline中。这些处理器将处理传入和传出的数据,并执行特定的业务逻辑。

  5. 绑定端口(服务器端)或连接远程主机(客户端):如果你的应用程序是服务器端,使用ServerBootstrap绑定指定的端口;如果是客户端,使用Bootstrap连接远程主机。

  6. 监听事件和执行操作:在引导类启动后,你可以通过监听事件并执行相应的操作来处理数据、连接、断开连接等。这可以通过ChannelHandler中的回调方法来实现。

  7. 关闭应用程序:在合适的时机,调用相应的方法关闭引导类,以释放资源并关闭应用程序。

 

package com.jjj.ddda;

import java.util.Date;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
/**
 * @Auther: TianWei_18811580953
 * @Date: 2023/8/21 - 08 - 21 - 12:17
 * @Description: com.jjj.ddda
 * @version: 1.0
 */
public class testaab {
    public static void main(String[] args) {
        // 创建事件循环组
        EventLoopGroup bossGroup = new NioEventLoopGroup();
        EventLoopGroup workerGroup = new NioEventLoopGroup();
        try {
            // 创建ServerBootstrap实例
            ServerBootstrap serverBootstrap = new ServerBootstrap();
            serverBootstrap.group(bossGroup, workerGroup)
                    .channel(NioServerSocketChannel.class)
                    .childHandler(new ChannelInitializer<SocketChannel>() {
                        @Override
                        protected void initChannel(SocketChannel ch) throws Exception {
                            ch.pipeline().addLast((ChannelHandler) new MyChannelHandler());
                        }
                    });
            // 绑定端口并启动服务器
            ChannelFuture future = serverBootstrap.bind(8080).sync();
            // 阻塞直到服务器关闭
            future.channel().closeFuture().sync();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        } finally {
            // 关闭事件循环组
            bossGroup.shutdownGracefully();
            workerGroup.shutdownGracefully();
        }
    }
}

 

 

initChannel()方法中,我们添加了一个自定义的ChannelHandler(MyChannelHandler),用于处理传入的数据。

 

 

标签:netty,ChannelHandler,Netty,什么样,io,import,channel,底层
From: https://www.cnblogs.com/89564f/p/17645731.html

相关文章

  • netty底层实现是什么样的
    ​  <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.90.Final</version></dependency>Netty是一个高性能的网络编程框架,它提供了一种简......
  • 《深入浅出Java虚拟机 — JVM原理与实战》带你攻克技术盲区,夯实底层基础 —— 吃透cla
    前言介绍了解Java代码如何编译成字节码并在JVM上执行是非常重要的。这种理解可以帮助我们理解程序执行时发生的情况,确保语言特性符合逻辑,并在进行讨论时能够全面考虑各种因素和副作用。本文将深入探讨Java代码编译成字节码并在JVM上执行的过程。如果您对JVM的内部结构和字节码执行......
  • Netty编解码&粘包拆包&心跳机制&断线自动重连
    Netty编解码Netty涉及到编解码的组件有Channel、ChannelHandler、ChannelPipe等,先大概了解下这几个组件的作用。ChannelHandlerChannelHandler充当了处理入站和出站数据的应用程序逻辑容器。例如,实现ChannelInboundHandler接口(或ChannelInboundHandlerAdapter),你就可以接收入站事件......
  • Netty核心功能与线程模型
    Netty初探NIO的类库和API繁杂,使用麻烦:需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。开发工作量和难度都非常大:例如客户端面临断线重连、网络闪断、心跳处理、半包读写、网络拥塞和异常流的处理等等。Netty对JDK自带的NIO的API进行......
  • 【8月摸鱼计划】剪映的底层原理
    剪映是一款视频编辑软件,其底层原理处理和音频处理等多个方面。1.视频处理:剪映的底层实现了视频的导入、裁剪、拼接、调整速度、添加特效、应用滤镜等功能。在视频处理过程中,剪映会对视频进行解码、帧间差分、帧率控制、编码等操作,以达到用户所需的编辑效果。2.图像处理:剪映提供......
  • Netty源码学习2——NioEventLoop的执行
    系列文章目录和关于我零丶引入在《Netty源码学习1——NioEventLoopGroup的初始化》中,我们学习了NioEventLoopGroup和NioEventLoop的初始化,在下面netty服务端启动的demo中会在ServerBootStrap中指定Channel为Nio类型的Channel,然后启动的时候绑定端口,之前我们解释道NioEventLoop......
  • 深度云化时代,什么样的云网络才是企业的“心头好”?
    科技云报道原创。近年来企业上云的快速推进,对云网络提出了更多需求。最初,云网络只是满足互联网业务公网接入。随着移动互联网的发展,企业对云上网络安全隔离能力和互访能力、企业数据中心与云上网络互联、构建混合云的能力,以及在云上多地域部署业务后的多地域网络互联能力等,都推动着......
  • linux系统句柄限制调整,当使用netty/socket触发达到系统最大连接数时查看
    socket原理:客户端使用tcp端口连接至服务端,服务端会打开一个句柄文件和客户端保持连接,注意并不是一个连接就会占用一个服务器端口,所以socket连接数跟系统端口最大连接数无关,不然系统防火墙不就没啥用,默认系统每个进程打开的句柄是有限制的,另外整个系统还有一个句柄限制总数,所以soc......
  • 【校招VIP】前端校招考点之vue底层特性
    考点介绍:大家在面试途中遇到的相对多的问题,也是难点的问题一般都有vue底层原理。对于只会用但是不懂的小白来说真是太痛苦了,仅仅能说出来一些数据劫持,双向数据绑定,虚拟dom树的名词来说远远不够。一、考点题目1、Vue实现数据双向绑定的原理是什么?解答:Vue实现数据双向绑定的原......
  • elasticsearch中的数据类型search_as_you_type及查看底层Lucene索引
    search_as_you_type字段类型用于自动补全,当用户输入搜索关键词的时候,还没输完就可以提示用户相关内容。as_you_type应该是说当你打字的时候。它会给索引里的这个类型的字段添加一些子字段_2gram_3gram和_index_prefix。_2gram的意思是,如果一个值是abcd,2gram就是abbccd,3gr......