学习Netty实战心得笔记

Netty是什么?

Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具

Netty能做什么??
netty天生异步,封装了底层NIO,解决了NIO开发的复杂性,屏蔽底层细节,让用户开发更加方便,开发网络通信直块的框架使用,可以使用这个搭建http服务器等等
Netty是怎么传输数据的??
netty支持四种传输模式 olo nio local embedded
olo 传统io 阻塞io
nio 非阻塞io linux--epoll 比nio更好但只在linux下 非阻塞可以零拷贝传输( io调用最终都与操作系统的调用有关,一般需要将数据从系统空间和用户空间进行传输,这里就消耗了大量时间,零拷贝的意思是没有这一次的传输过程)
local 用于jvm内部传输
embedded 单元测试而已

Netty三大组件
ByteBuf eventLoop channelHandler

ByteBuf 数据的缓冲区,对比与NIO ByteBuffer 更加简单易操作 自动增大,不再那么读写要换模式什么的

eventLoop 线程模型,封装底层细节,eventLoop 对应多个channel,eventLoop 对应一个Thread
一个Channel只能对应一个eventLoop eventLoop:事件循环,事件触发是发生操作

channelHandler:和用户打交道的地方,用户实现这个以完成对应的业务,channelHandler上的操作最终会反应到Channel上然后由Channel对应的eventLoop 上的Thread完成操作,这个是可以被多个channelPipeline共享使用注解标记

channelFuture 拿到结果的返回值,类似于java future,一个操作调用可能不会离开返回值,需要一个在之后某个时间点拿到结果的玩意,就是这个。同一个channel操作都是按顺序的

channelPipeline 可以理解为channelHandler链,netty采用责任链模式,组装handler链提高灵活性,可以在代码中动态的改变channelPipeline链的顺序,channelHandler分为in和out两种 channelInboundHandler和channeloutboundHandler,对应进站和出站,请求和响应,消息只会被感兴趣的handler处理,类型不配合会自动转发到下一个handler
channelPipeline只有一条链,channelInboundHandler和channeloutboundHandler都在里面

channelHandlerContext 代表channelHandler和channelPipeline之间的关联,每当有channelHandler添加进channelPipeline都会创建,channelHandlerContext管理当前的handler和同一个channelPipeLine的其他handler的交互,如果使用channelHandlerContext方法,将调用当前关联的下一个handler

bootstrap 配置客户端和服务端,做的工作是绑定接口,监听,初始化channelPipeline,为新建立创建个channel,选择使用哪种传输模式,设置EventLoopGroup提供用于处理Channel事件的EventLoop


简而言之和用户打交道的基本就是handler,用户更加需求动态组装handler链即可

笔记性博客,旨在简明记忆而已



猜你喜欢

转载自blog.csdn.net/qq_33330687/article/details/79933326