API

核心是 Channel

classDiagram    interface Comparable    interface AttributeMap    interface Channel    interface ServerChannel    interface ChannelPipeline    interface ChannelConfig    class AbstractChannel    Comparable <|-- Channel    AttributeMap <|-- Channel    Channel <|.. ServerChannel    ChannelPipeline <|..* Channel    ChannelConfig <|..* Channel    Channel <|-- AbstractChannel

Channel的方法

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

Channel 是线程安全的

内置的传输方式

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

在实际生产环境中,只推荐使用 NIO 了,Epoll 也是NIO, 是 Netty 自己单独实现的,性能称比 Linux 自带的好

NIO

Epoll

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

OIO

更熟悉的名字叫做 BIO

Local

没有绑定物理网络地址

Embedded

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