Netty Channel

阅读数:60 评论数: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配置

参考:netty channel配置

 




相关推荐

Java NIO根据操作系统不同,比如macosx是KQueueSelectorProvider、windows有WindowsSelectorProvider、Linux有EPollSelec

Netty提供了丰富的解码器抽象基类:主要分为两类: (1)解码字节到消息(ByteToMessageDecoder和ReplayingDecoder) (2)解码消

一、概述 Netty的强大的地方,是他能方便的实现自定义协议的网络传输。Netty基于Reactor模式:http://1024s.top/mbstudy/mbBlog/blogDetail?blog

netty提供了6种不同的websocket类型: (1)BinaryWebsocketFrame,二进制数据类型 (2)TextWebSocketFrame,文本数

一、概述 在计算机中,我们以字节为单位,一个字节为8bit。 而数据存储中的字节顺序多取决于硬件设计,即所谓的大端存储和小端存储。Intel处理器使用小端存储,PowerPc的处理器采用大端存储。 当

ByteBuf是对字节的封装,有基于堆内存和直接内存。若是堆内存,应用程序无需考虑什么时候释放,因为GC是帮助做,如果是直接内存,那么需要主动释放。 每个ByteBuf对象都有一个引用计数,当这个数值

Netty中的HashedWheelTimer可以用于提交延迟任务,Java里的Time组件也具备相同的功能,不过Time是基于执行是基于优先队列实现的,相当于需要对所有的任务基于执行的时间排个

一、netty客户端流控 1、这几种情况下,如果客户端没有流控保护,很容易发生内存泄露。 (1)网络瓶颈,当客户端发送速度超过网络链路处理能力,会导致客户端发送队列积压。 (2)当对端读取速度小于已方

LineBasedFrameDecoder以换行符\n或\r\n作为依据,遇到\r\n都认为是一条完整的消息。 而DelimiterBasedFrameDecoder允许我们指定任

HttpServerCodec HtttpServerCodec只能处理像http get的请求,也就是数据带在url问号后面的http请求。 GET请求包括两部