netty源码解解析(4.0)-2 Chanel的接口设计
生活随笔
收集整理的這篇文章主要介紹了
netty源码解解析(4.0)-2 Chanel的接口设计
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
全名: io.netty.channel.Channel Channel內(nèi)部定義了一個Unsafe類型,Channel定義了對外提供的方法,Unsafe定義了具體實現(xiàn)。我把Channel定義的的方法分為三種類型:
2. outbound方法
3. inbound方法
Unsafe接口定義
- 輔助方法。
- outbound方法
- inbound方法
| 方法 | 說明 |
| EventLoop eventLoop() | 得到EventLoop實例,每個Channel實例都會被注冊到一個EventLoop中,這個EventLoop實例就是Channel注冊的實例。 |
| Channel parent() | 得到父Channel實例。如: channelB = channelA.accept(), 那么channelA就是channelB的parent。 |
| ChannelConfig config() | 得到Channel實例的配置信息。 |
| boolean isOpen()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? | channel是否處于open狀態(tài)。netty為每個channel定義了四種狀態(tài)open->registered->active->closed。一個新創(chuàng)建的channel處于open狀態(tài),隨后他被注冊到一個eventloop中它處于open+registered狀態(tài),當這個channel上的連接建立成功后它處于open+registered+active狀態(tài),被關閉后處于closed狀態(tài)。 |
| boolean isRegistered() | channel是否處于registered狀態(tài)。 |
| boolean isActive() | channel是否處于active狀態(tài)。 |
| SocketAddress localAddress() | channel的本地bind的地址。 |
| SocketAddress remoteAddress() | channel連接的遠程channel的地址。 |
| boolean isWritable() | channel的I/O線程是否可以立即執(zhí)操作。 |
| Unsafe unsafe() | 得到channel內(nèi)部的Unsafe實例。 |
| ChannelPipeline pipeline() | 得到channel內(nèi)部的ChannelPipeline實例。 |
| ByteBufAllocator alloc() | channel持有的buffer分配器。 |
| 方法 | 說明 |
| ChannelFuture bind(SocketAddress localAddress) ChannelFuture bind(SocketAddress localAddress, ChannelPromise promise) | 讓channel綁定的指定的本地地址(localAddress)上。這個方法會觸發(fā)ChannelOutboundHandler#bind(ChannelHandlerContext, SocketAddress, ChannelPromise)方法的調(diào)用。 |
| ChannelFuture connect(SocketAddress remoteAddress) ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress) ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise) | 連接到遠程地址(remoteAddress), 這個方法會觸發(fā)ChannelOutboundHandler#connect(ChannelHandlerContext, SocketAddress, SocketAddress, ChannelPromise)方法的調(diào)用。 |
| ChannelFuture disconnect() ChannelFuture disconnect(ChannelPromise promise); | 斷開連接, 這個方法會觸發(fā)ChannelOutboundHandler#disconnect(ChannelHandlerContext, ChannelPromise)的調(diào)用。 |
| ChannelFuture close() ChannelFuture close(ChannelPromise promise) | 關閉channel. 這個方法會觸發(fā)ChannelOutboundHandler#close(ChannelHandlerContext, ChannelPromise)的調(diào)用。 |
| ChannelFuture deregister() ChannelFuture deregister(ChannelPromise promise) | 從eventloop中注銷這個channel,這個方法會觸發(fā)ChannelOutboundHandler#deregister(ChannelHandlerContext, ChannelPromise)的調(diào)用。 |
| ChannelFuture write(Object msg) ChannelFuture write(Object msg, ChannelPromise promise) | 向channel寫入數(shù)據(jù),這個操作不會導致真正寫操作,只會把數(shù)據(jù)追加到輸出緩沖區(qū)中。它會觸發(fā)ChannelOutboundHandler#write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise)調(diào)用。 |
| Channel flush() | 對輸出緩沖區(qū)中的數(shù)據(jù)執(zhí)行真正的寫操作,調(diào)用這個方法后連接的另一端才能收到write的數(shù)據(jù),它會觸發(fā)ChannelOutboundHandler#flush(ChannelHandlerContext ctx)調(diào)用。 |
| ChannelFuture writeAndFlush(Object msg, ChannelPromise promise) ChannelFuture writeAndFlush(Object msg) | 效果和先調(diào)用write然后調(diào)用flush一樣。 |
| 方法 | 說明 |
| Channel read()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? | 從channel中讀取數(shù)據(jù),把數(shù)據(jù)放到輸入緩沖區(qū)中,然后觸發(fā)ChannelInboundHandler#channelRead(ChannelHandlerContext, Object)和ChannelInboundHandler#channelReadComplete(ChannelHandlerContext)調(diào)用,如果之前已經(jīng)有一個read操作正在執(zhí)行或等待執(zhí)行,這個方法不會有任何影響。 |
| 方法 | 說明 |
| SocketAddress localAddress() | 同Channel |
| SocketAddress remoteAddress() | 同Channel |
| void register(EventLoop eventLoop, ChannelPromise promise) | 同Channel, |
| void bind(SocketAddress localAddress, ChannelPromise promise) | 同Channel, 必須在I/O線程中執(zhí)行 |
| void connect(SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise) | 同Channel, 必須在I/O線程中執(zhí)行 |
| void disconnect(ChannelPromise promise) | 同Channel, 必須在I/O線程中執(zhí)行 |
| void close(ChannelPromise promise) | 同Channel, 必須在I/O線程中執(zhí)行 |
| void closeForcibly() | 立即關閉channel,并且不觸發(fā)任何事件。 |
| void deregister(ChannelPromise promise) | 同Channel, 必須在I/O線程中執(zhí)行 |
| void beginRead() | 為channel觸發(fā)read事件做準備。如:把read事件注冊到NIO 的selector上。 必須在I/O線程中執(zhí)行 必須在I/O線程中執(zhí)行 |
| void write(Object msg, ChannelPromise promise) | 同Channel, 必須在I/O線程中執(zhí)行 |
| void flush() | 同Channel, 必須在I/O線程中執(zhí)行 |
| ChannelOutboundBuffer outboundBuffer() | 得到channel的輸出緩沖區(qū),write的數(shù)據(jù)就是追加到這個緩沖區(qū)中。 必須在I/O線程中執(zhí)行 |
轉(zhuǎn)載于:https://www.cnblogs.com/brandonli/p/9919562.html
總結
以上是生活随笔為你收集整理的netty源码解解析(4.0)-2 Chanel的接口设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 弹层蒙版(mask),ios滚动穿透,我
- 下一篇: 构造和运行模块