API

核心是 Channel

批注 2020-07-06 123702

Channel的方法

方法名 描述
eventLoop 返回分配给ChannelEventLoop
pipeline 返回分配给ChannelChannelPipeline
isActive 如果Channel是活动的,则返回true。活动的意义可能依赖于底层的传输。例如,一个Socket传输一旦连接到了远程节点便是活动的,而一个Datagram传输一旦被打开便是活动的
localAddress 返回本地的SocketAddress
remoteAddress 返回远程的SocketAddress
write 将数据写到远程节点。这个数据将被传递给ChannelPipeline,并且排队直到它被flush
flush 将之前已写的数据刷新到底层传输,如一个Socket
writeAndFlush 一个简便的方法,等同于调用write()并接着调用flush()

Channel 是线程安全的

内置的传输方式

名称 描述 使用场景
NIO io.netty.channel.socket.nio 使用java.nio.channels包作为基础----基于选择器的方式 需要非阻塞的情况下(常用)
Epoll io.netty.channel.epoll 由JNI驱动的epoll()和非阻塞IO。这个传输支持只有在Linux上可用的多种特性,如SO_REUSEPORT,比NIO传输更快,而且是完全非阻塞 同上
OIO io.netty.channel.socket.oio 使用java.net包作为基础----使用阻塞流 需要阻塞传输的情况下
Local io.netty.channel.local 可以在VM内部通过管道进行通信的本地传输 在同一个JVM内部
Embedded io.netty.channel.embedded Embedded传输,允许使用ChannelHandler而又不需要一个真正的基于网络的传输 测试ChannelHandler

NIO

批注 2020-07-06 124813

Epoll

该传输的语义同NIO 如果要使用该传输 只需要将 EventLoop 中的 NioServerSocketChannel 替换为 EpollServerSocketChannel即可

OIO

批注 2020-07-06 125423

Local

没有绑定物理网络地址

Embedded

可以将一组ChannelHandler 嵌入到 其他 ChannelHandler内部