Netty Channel
阅读数:106 评论数:0
跳转到新版页面分类
python/Java
正文
一、Channel的四大类型
1、FileChannel
FileChannel是操作文件的Channel,可以通过FileChannel从一个文件中读取数据,也可以将数据写入到文件中,其为阻塞模式。
2、DatagramChannel
用来处理UDP连接。
3、ServerSocketChannel
用在服务器端的,可以监听客户端的TCP连接。
4、SocketChannel
客户端用来进行TCP连接的Channel,创建一个SocketChannel的方法有两种:
(1)打开一个SocketChannel,然后将其连接到某个服务器。
(2)当一个ServerSocketChannel接受到连接请求时,会返回一个SocketChannel对象。
二、相关概念
Channel是Netty网络通信的主体,负责同对端进行网络通信等功能。
1、Channel常用API
(1)EventLoop eventLoop()
返回该通道注册的事件轮询器。
(2)Channel parent()
如果是ServerSocketChannel实例则返回null,SocketChannel实例则返回对应的ServerSocketChannel。
(3)ChannelConfig config()
返回该通道的配置参数。
(4)boolean isOpen()
端口是否处于open,通道默认一创建isOpen方法就会返回true,close方法被调用后该方法返回false。
(5)boolean isRegistered()
是否已注册到EventLoop。
(6)public boolean isActive()
通道是否处于激活。NioSocketChannel的实现是java.nio.channels.SocketChannel实例的isOpen()与isConnected()都返回true。NioServerSocketChannel的实现是ServerSocketChannel.socket().isBound(),如果绑定到端口处于激活状态。
(7)ChannelFuture closeFuture()
Future模式的应用,调用该方法的目的并不是关闭通道,而预先创建一个Future,等通道关闭时,会通知该Future,用户可以通过该Future注册事件 。
(8)ChannelFuture bind(SocketAddress localAddress)
Netty服务端绑定到本地端口,开始监听客户端的连接请求,该过程会触发ChannelPipeline。
(9)ChannelFuture connect(SocketAddress remoteAddress)
Netty客户端连接到服务端。
(10)ChannelFuture disconnect()
断开连接,但不会释放资源,该通道还可以通过connect重新与服务器建立连接。
(11)ChannelFuture close()
关闭通道,回收资源,该通道的生命周期完全结束。
(12)ChannelFuture deregister()
取消注册。
(13)Channel read()
通道读,该方法并不是直接从读写缓存区读取,而是向NIO Selector注册读事件(实际中主要基于NIO),当通道收到对端的数据后,事件选择器会处理读事件,从而触发ChannelInboundHandler#channelRead事件,然后继续触发ChannelInboundHandler#channelReadComplete(ChannelHandlerContext)事件。
(14)ChannelFuture write(Object msg)
会触发写事件链,该方法只是会将字节流写入到通道缓存区,并不会调用flush方法写入通道中。
(15)Channel flush()
把通道缓存区中的消息写入到通道中。
(16)ChannelFuture writeAndFlush(Object msg)
相当于调用write和flush方法。
2、Channel配置