Netty实战读书笔记(第三章)

Netty组件和设计:Netty实战的第一章梳理了Netty的概念、使用场景、技术基础。第二章通过一个EchoClient和EchoServer小的应用程序简介了使用Netty框架的处理流程。第三章将重Netty库的使用和框架的设计来探讨Netty。通过在Netty高性能框架上,使用Netty类库构建高性能服务器。Netty在技术上,通过异步和实践驱动的方式,做到高负载下应用技术的可扩展性和可伸缩性。在设计上,通过应用程序和网络通信解耦的方式,提高了模块化和代码的可重用性。


Netty主要组件:server启动阶段所做的工作、pipeline管理数据流和channelHandler阶段做的事件逻辑处理。

server启动阶段:channel-socket(网络)、EventLoop-多线程、控制流、并发(网络)、channelFuture - 异步通知(网络)。


channel作为直接连接网络的句柄,在socket上封装,减少了直接使用套接字的复杂性。在Netty中,主要通过NioSocketChannel、NioSocketServerChannel、NioSctpChannel、NioDatagramChannel、LocalServerChannel、EmbeddedChannel。

EventLoop


一个EventLoopGroup有多个EventLoop,EventLoopGroup提供EventLoop给channel处理事件,一个EventLoop在生命周期内和一个线程绑定,EventLoop处理事件在绑定的这个线程内处理。一个channel只能和一个EventLoop绑定,一个EventLoop和多个channel绑定(相当于多个channel注册在一个Selector中)。

ChannelFuture:

在Netty中,所有I/O都是异步的,所以在特定时间点会有执行完毕的通知。ChannelFuture接口提供了一个AddListener方法addListener(GenericFutureListener<? extends Future<? super Void>> listener);,该方法注册了channelFutureListener,以便在方法处理完后得到通知。


Netty数据流和channelHandler的应用逻辑:

channelHandler:主要处理接收的入站事件和数据,channelHandler几乎可以处理任何的动作,例如ChannelInBoundHandler当处理完毕后,写入,冲刷flush ChannelHandlerConext 示例。

netty提供了许多实现channelHandler接口的类,这种是适配器模式的,在链中,有不同的channelHandler,channelPipeline会自动将pipeline链中的事件转发给下一个channelHandler。提供默认的适配器会最大限度的降低编程的需求。Netty中主要的适配器有:channelHandlerAdapter、channelInBoundHandlerAdapter、channerlOutBoundHandlerAdapter、channelDuplexAdapter、simpleInBoundHandlerAdapter(为channelInBoundHandlerAdapter的子类)。


channelPipeline:channelPipeline提供了channelHandler的容器,当channelHandler被创建时,需要分配到专属的ChannelPipeline中。一个initializerChannel被注册到了ServerBootstrap中,initializeChannel提供了方法initChannel,该方法用于实现向channelPipeline中添加channelHandler。


Netty中数据流的编码解码:在入站事件中,主要是将字节码解码为java对象,在出站事件中,主要是将java对象编码为字节码。

对于入站字节,在pipeline中,会自动通过decode解码为对象,之后找到Pipeline链的下一个channelInBoundHandlerAdapter处理。

对于出站字节,在PipeLine中,会自动encode编码为字节流,之后找到Pipeline链的下一个ChannelOutBoundHandlerAdapter。


simpleChannelInBoundHandler<T>:正常情况下,应用程序会创建一个channelHandler接收客户端的消息请求,并更具客户端的消息做相应的应用逻辑处理,接收到的需要保存两个对象,一个是消息对象类型为T泛型,一个是channelHandlerContext引用,这个应用将传递给所有的channelHandler。


bootstrap引导:Netty中bootstrap主要有两类,BootStrap和ServerBootstrap。

客户端的Bootstrap,作为客户端主要用来连接指定主机和端口的进程(进程对应端口)和serverBootstrap用来绑定本地端口。虽然都是引导类,但是引导客户端和引导服务器有本质的区别。

服务器端有两个serverBootstrap主要的作用:


一个serverBootstrap的EventLoopGroup绑定到本地端口,将分配一个Eventloop为连接创建新channel的EventLoop,另一个EventLoopGroup则负责调用EventLoop处理连接请求。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值