需要了解的有,selector、channel、handler、pipeline、socket、eventLoopGroup、bootstrap、channelFuture、channelInitializer、inbound、channelHandlerContext、textWebSocketFrame、channelGroup,还有很多,不过我们用不到。我写的只是给你们一个认知,知道这是个什么玩意,我们才能去了解它。
概念
1. selector
Selector 一般称 为选择器 ,也可以翻译为 多路复用器 。它是Java NIO核心组件中的一个,用于检查一个或多个NIO Channel(通道)的状态是否处于可读、可写。如此可以实现单线程管理多个channels,也就是可以管理多个网络链接。 相比使用多线程,避免了线程上下文切换带来的开销。
可以理解为一个厨房,服务员就问这些个颠勺的,好了没,好了没,该上菜啦,一会又说,又有点菜的了,谁不忙赶快做下。
2. channel
channel 是一个通道,用于连接字节缓冲区 buf 和另一端的实体,这个实例可以是 socket,也可以是 file,在 nio 网络编程模型中,服务端和客户端进行 io 数据交互(得到彼此推送的信息)的媒介就是 channel。
你可以理解为一根电话线,两端各有一个人,A说:我给你一个小a;B说:我收到了,听着不错,我也给你一个小b;A说:我不要;B:。。。;
3. pipeline
pipeline 是一个管道,直观上理解就是这样的。
4. handler
应该叫 channelHandler,就是传输数据的处理工具,包括协议解析,编解码,合并块等。
pipeline 比作一个走廊,handler 比作一个关卡,数据比作一个人。
handler1:小伙子长得不错啊,脑门盖个章就能过去了。
handler2:哎呦,脑门有章,脸上画个圈就能过去了。
handler..n:呵,花花绿绿的,这是你的核酸证明,可以过去了。
5. socket
这个就不解释了。
6. eventLoopGroup
eventLoop 是一个 IO 线程,eventLoopGroup 是一组 eventLoop 的抽象。在 netty 服务器端编程中我们需要 BossEventLoopGroup 和 WorkerEventLoopGroup 两个 eventLoopGroup 来进行工作。
BossEventLoopGroup 通常是一个单线程的 EventLoop,EventLoop 维护着一个注册了 ServerSocketChannel 的 Selector 实例,EventLoop 的实现涵盖 io 事件的分离,和分发。
通常 BossEventLoopGroup 的线程数默认为 1,WorkerEventLoopGroup 的线程数默认为cpu核数的2倍。
7. bootstrap
辅助配置 eventloopGroup 启动,添加一些必要的参数。
8. channelFuture
netty 里面的 io 操作全部是异步的。这意味着,io 操作会立即返回,但是在调用结束时,无法保证 io 操作已完成。取而代之,将会返回给你一个 channelFuture 实例,提供 io 操作的结果信息或状态
9. channelInitializer
通道初始化器 channelInitializer 实际上为 inbound 通道处理器,主要目的是为程序员提供了一个简单的工具,用于在某个 channel 注册到 eventLoop 后,对这个 channel 执行一些初始化操作。
10. inbound
入站,对应出站 outbound。
11. channelHandlerContext
在 channelHandler 添加到 channelPipeline 时会创建一个实例,就是 channelHandlerContext。
通过 channelHandlerContext 实现对 channel 的访问和使用。
12. textWebSocketFrame
websocket 协议的定义,就是协议的内容、属性等都可以通过这个类设置和获取。
13. channelGroup
就是一个 channel 集合,用于消息的广播。
其他
像reactor模式、nio、aio等,面试爱问的东西,大家自己去看下还是很有必要的。
面试造火箭、工作拧螺丝!!!