netty源碼解解析(4.0)-2 Chanel的接口設計

全名: io.netty.channel.Channel
Channel內部定義了一個Unsafe類型,Channel定義了對外提供的方法,Unsafe定義了具體實現。我把Channel定義的的方法分爲三種類型:
  • 輔助方法。
  • outbound方法
  • inbound方法
下面依次對這三種方法給予詳細說明:
 
1. 輔助方法
方法
說明
EventLoop eventLoop()
獲得EventLoop實例,每一個Channel實例都會被註冊到一個EventLoop中,這個EventLoop實例就是Channel註冊的實例。
Channel parent()
獲得父Channel實例。如: channelB = channelA.accept(), 那麼channelA就是channelB的parent。
ChannelConfig config()
獲得Channel實例的配置信息。
boolean isOpen()                                                                                      
channel是否處於open狀態。netty爲每一個channel定義了四種狀態open->registered->active->closed。一個新建立的channel處於open狀態,隨後他被註冊到一個eventloop中它處於open+registered狀態,當這個channel上的鏈接創建成功後它處於open+registered+active狀態,被關閉後處於closed狀態。
boolean isRegistered()
channel是否處於registered狀態。
boolean isActive()
channel是否處於active狀態。
SocketAddress localAddress()
channel的本地bind的地址。
SocketAddress remoteAddress()
channel鏈接的遠程channel的地址。
boolean isWritable()
channel的I/O線程是否能夠當即執操做。
Unsafe unsafe()
獲得channel內部的Unsafe實例。
ChannelPipeline pipeline()
獲得channel內部的ChannelPipeline實例。
ByteBufAllocator alloc()
channel持有的buffer分配器。
 
2. outbound方法
方法
說明
ChannelFuture bind(SocketAddress localAddress)
ChannelFuture bind(SocketAddress localAddress, ChannelPromise promise)
讓channel綁定的指定的本地地址(localAddress)上。這個方法會觸發ChannelOutboundHandler#bind(ChannelHandlerContext, SocketAddress, ChannelPromise)方法的調用。
ChannelFuture connect(SocketAddress remoteAddress)
ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress)
ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise)
鏈接到遠程地址(remoteAddress), 這個方法會觸發ChannelOutboundHandler#connect(ChannelHandlerContext, SocketAddress, SocketAddress, ChannelPromise)方法的調用。
ChannelFuture disconnect()
ChannelFuture disconnect(ChannelPromise promise);
斷開鏈接, 這個方法會觸發ChannelOutboundHandler#disconnect(ChannelHandlerContext, ChannelPromise)的調用。
ChannelFuture close()
ChannelFuture close(ChannelPromise promise)
關閉channel. 這個方法會觸發ChannelOutboundHandler#close(ChannelHandlerContext, ChannelPromise)的調用。
ChannelFuture deregister()
ChannelFuture deregister(ChannelPromise promise)
從eventloop中註銷這個channel,這個方法會觸發ChannelOutboundHandler#deregister(ChannelHandlerContext, ChannelPromise)的調用。
ChannelFuture write(Object msg)
ChannelFuture write(Object msg, ChannelPromise promise)
向channel寫入數據,這個操做不會致使真正寫操做,只會把數據追加到輸出緩衝區中。它會觸發ChannelOutboundHandler#write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise)調用。
Channel flush()
對輸出緩衝區中的數據執行真正的寫操做,調用這個方法後鏈接的另外一端才能收到write的數據,它會觸發ChannelOutboundHandler#flush(ChannelHandlerContext ctx)調用。
ChannelFuture writeAndFlush(Object msg, ChannelPromise promise)
ChannelFuture writeAndFlush(Object msg)
效果和先調用write而後調用flush同樣。
 
3. inbound方法
方法
說明
Channel read()                                                                                        
從channel中讀取數據,把數據放到輸入緩衝區中,而後觸發ChannelInboundHandler#channelRead(ChannelHandlerContext, Object)和ChannelInboundHandler#channelReadComplete(ChannelHandlerContext)調用,若是以前已經有一個read操做正在執行或等待執行,這個方法不會有任何影響。
 
Unsafe接口定義
方法
說明
SocketAddress localAddress()
同Channel
SocketAddress remoteAddress()
同Channel
void register(EventLoop eventLoop, ChannelPromise promise)
同Channel,
void bind(SocketAddress localAddress, ChannelPromise promise)
同Channel, 必須在I/O線程中執行
void connect(SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise)
同Channel, 必須在I/O線程中執行
void disconnect(ChannelPromise promise)
同Channel, 必須在I/O線程中執行
void close(ChannelPromise promise)
同Channel, 必須在I/O線程中執行
void closeForcibly()
當即關閉channel,而且不觸發任何事件。
void deregister(ChannelPromise promise)
同Channel, 必須在I/O線程中執行
void beginRead()
爲channel觸發read事件作準備。如:把read事件註冊到NIO 的selector上。 必須在I/O線程中執行 必須在I/O線程中執行
void write(Object msg, ChannelPromise promise)
同Channel, 必須在I/O線程中執行
void flush()
同Channel, 必須在I/O線程中執行
ChannelOutboundBuffer outboundBuffer()
獲得channel的輸出緩衝區,write的數據就是追加到這個緩衝區中。 必須在I/O線程中執行
相關文章
相關標籤/搜索