-
channel分为fileChannel,DatagramChannel(udp通信)、SocketChannel、ServerSocketChannel(TCP通信)
-
buffer
ByteBuffer
MappedByteBuffer
DirectByteBuffer
HeapByteBuffer
ShortBuffer
IntBuffer
LongBuffer
FloatBuffer
DoubleBuffer
CharBuffer -
多线程版服务器端socket通信缺点:内存高(一个线程1m内存)、上下文切换成本高、不适合连接数多的场景
-
线程池版服务器端socket通信:阻塞模式下,线程仅能处理一个socket连接;仅适合短连接场景。
-
select版服务器端设计:selector配合一个线程来管理多个channel,获取这些channel上发生的事件,非阻塞模式不会让线程吊死在一个channel上。适合连接数多,但流量低的场景。selector监听到读写事件后,会交由对应的线程去处理。
-
四个事件accept、connect、read、write
accept: server端,收到连接请求时触发
connect:客户端连接建立后触发
read:可读事件
write:可写事件
serverSocketChannel只关注accept事件
socketChannel关注可读可写事件 -
多线程版服务器端select,每个线程配合一个selector
boss 负责accecpt,建立连接
worker负责读写 -
netty 运行流程
-
入站、出站
数据写入、数据写出
出站handler,必须要往channel中写入数据才会触发。
入站是按照加入pipline的顺序,出站是反过来的。 -
eventloop DefaultEventLoopGroup只处理普通事件,不处理io事件。
-
channel
-
future、promise
-
handler & pipeline
-
bytebuf
-
指定额外的group处理事件,多个handler用不同的eventloopGroup
16. channelFuture对象addListener
17. 如何关闭channel后执行操作
获取closeFuture
主线程sync或加listener
-
netty配置logback
17. super.channelRead 将当前的handler处理结果传给下一个handler
-
入栈出站规则
-
EmbeddedChannel做模拟操作