💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 一、Netty的工作原理 客服端 Bootstap |-----------EventLoopGroup |-----连接成功 | |-------------NioSocketChannel-----------|--------------->|-----读数据 |---------------------------------------pipeline------------------------->服务器 |-----处理异常 服务器 ServiceBootStrap |---------------------NioServiceSocketChannel | |---------------------------localhost | |---------------------------------------读,发,写 收信息 # 二、Netty核心组件 1. Channel 作用:传入(入站)或者(出站)数据的载体,因此,他可以被打开或者被关闭,连接或者断开连接。 ChannelInboundHandler channelRead() 对于每一个传入的消息都要调用 channelReadComplete()读取到当前批量读取到最后一条信息 exceptionCaught()在读操作期间,有异常会抛出 ChannelInitializer 当一个新的连接被接收时,一个新的子Channel将会创建,而ChannelInitializer将会把一个你的实现 ChannelInboundHandler接口加入Channel的ChannelPiepeline中。 SimpleChannelInboundHandler channelActive()在服务器的连接已经建立之后将被调用 channelRead0( ) 当从服务器接受到一条消息是被调用。 exceptionCaught()在处理过程中引发异常时被调用。 2.Channel的组件和设计 Channel、EventLoop、ChannelFuture Channel:主要作用是I/O操作bind()、connect()、read()、write() EventChannel: 一个EventLoopGroup包含一个多个EventLoop。 一个EventLoop在他的生命周期内只和一个Thread绑定。 所有由EventLoop处理的I/O事件都将在它专有的Thread上被处理。 一个Channel在它的生命周期内注册于一个EventLoop。 一个EventLoop可能被分配给一个或多个Channel 。 2.回调 Netty当一个新的连接已经被建立时,ChannelHandler的channelActive回调方法。 3.Future 监听回调方法 ChannelFuture 实现类:channelFutureListener ChannelFuture接口 ChannelHandler接口 :数据从一种格式转换为另外一种数据格式,或者处理装换过程中所抛出的异常。 实现类 ChannelInboundHandler 发送客服端响应和冲刷数据。 5.事件和ChannelHandler 记录日志 数据装换 流控制 应用程序控制 ChannelPipeline接口 这个接口是做什么的? 他提供了ChannelHandler链的容器,并定义了用于在该链上的传播入站,和出站时间流的Api,当Channel被创 建 时,他会自动分配到ChannelPipeline ChannelInitializer安装到ChannelPipeline中的过程如下所示 1. 一个ChannelInitializer的实现注册到了ServerBootStrap 2. 当ChannelInitializer.initChannel()方法被调用时,ChannelInitiazer将在ChannelPipeline中安装一组自定义的ChannelHandler 3. ChannelInitalizer将自己从ChannelPipeline中移除 在内部ChannelHandle接口有两个实现类 第一个:ChannelInboundHandler 第二个:ChannelOutboundHandler 如果你想特殊处理ChannelHandler事件需要处理 适配器出现Adapter ChannelHandlerAdapter ChannelInboundHandlerAdapter ChannelOutboundHandlerAdapter ChannelDuplexHandler # 三 、netty的传输 1.传输Api ChannelHandler的典型用途 1.将数据从一种格式转换成 另外一种格式 2.提供异常通知 3.提供Channel变为活动的或者非活动的通知 4.提供当Channel注册到EventLoop或则从EventLoop注销是通知 5.提供有关用户自定义事件的通知 在这里用到了一种设计模式那就是拦截器设计模式