日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

netty源码解解析(4.0)-2 Chanel的接口设计

發(fā)布時(shí)間:2023/12/18 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 netty源码解解析(4.0)-2 Chanel的接口设计 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
全名: io.netty.channel.Channel Channel內(nèi)部定義了一個(gè)Unsafe類型,Channel定義了對(duì)外提供的方法,Unsafe定義了具體實(shí)現(xiàn)。我把Channel定義的的方法分為三種類型:
  • 輔助方法。
  • outbound方法
  • inbound方法
下面依次對(duì)這三種方法給予詳細(xì)說(shuō)明: 1. 輔助方法
方法 說(shuō)明
EventLoop eventLoop() 得到EventLoop實(shí)例,每個(gè)Channel實(shí)例都會(huì)被注冊(cè)到一個(gè)EventLoop中,這個(gè)EventLoop實(shí)例就是Channel注冊(cè)的實(shí)例。
Channel parent() 得到父Channel實(shí)例。如: channelB = channelA.accept(), 那么channelA就是channelB的parent。
ChannelConfig config() 得到Channel實(shí)例的配置信息。
boolean isOpen()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? channel是否處于open狀態(tài)。netty為每個(gè)channel定義了四種狀態(tài)open->registered->active->closed。一個(gè)新創(chuàng)建的channel處于open狀態(tài),隨后他被注冊(cè)到一個(gè)eventloop中它處于open+registered狀態(tài),當(dāng)這個(gè)channel上的連接建立成功后它處于open+registered+active狀態(tài),被關(guān)閉后處于closed狀態(tài)。
boolean isRegistered() channel是否處于registered狀態(tài)。
boolean isActive() channel是否處于active狀態(tài)。
SocketAddress localAddress() channel的本地bind的地址。
SocketAddress remoteAddress() channel連接的遠(yuǎn)程channel的地址。
boolean isWritable() channel的I/O線程是否可以立即執(zhí)操作。
Unsafe unsafe() 得到channel內(nèi)部的Unsafe實(shí)例。
ChannelPipeline pipeline() 得到channel內(nèi)部的ChannelPipeline實(shí)例。
ByteBufAllocator alloc() channel持有的buffer分配器。
2. outbound方法
方法 說(shuō)明
ChannelFuture bind(SocketAddress localAddress) ChannelFuture bind(SocketAddress localAddress, ChannelPromise promise) 讓channel綁定的指定的本地地址(localAddress)上。這個(gè)方法會(huì)觸發(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) 連接到遠(yuǎn)程地址(remoteAddress), 這個(gè)方法會(huì)觸發(fā)ChannelOutboundHandler#connect(ChannelHandlerContext, SocketAddress, SocketAddress, ChannelPromise)方法的調(diào)用。
ChannelFuture disconnect() ChannelFuture disconnect(ChannelPromise promise); 斷開(kāi)連接, 這個(gè)方法會(huì)觸發(fā)ChannelOutboundHandler#disconnect(ChannelHandlerContext, ChannelPromise)的調(diào)用。
ChannelFuture close() ChannelFuture close(ChannelPromise promise) 關(guān)閉channel. 這個(gè)方法會(huì)觸發(fā)ChannelOutboundHandler#close(ChannelHandlerContext, ChannelPromise)的調(diào)用。
ChannelFuture deregister() ChannelFuture deregister(ChannelPromise promise) 從eventloop中注銷這個(gè)channel,這個(gè)方法會(huì)觸發(fā)ChannelOutboundHandler#deregister(ChannelHandlerContext, ChannelPromise)的調(diào)用。
ChannelFuture write(Object msg) ChannelFuture write(Object msg, ChannelPromise promise) 向channel寫入數(shù)據(jù),這個(gè)操作不會(huì)導(dǎo)致真正寫操作,只會(huì)把數(shù)據(jù)追加到輸出緩沖區(qū)中。它會(huì)觸發(fā)ChannelOutboundHandler#write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise)調(diào)用。
Channel flush() 對(duì)輸出緩沖區(qū)中的數(shù)據(jù)執(zhí)行真正的寫操作,調(diào)用這個(gè)方法后連接的另一端才能收到write的數(shù)據(jù),它會(huì)觸發(fā)ChannelOutboundHandler#flush(ChannelHandlerContext ctx)調(diào)用。
ChannelFuture writeAndFlush(Object msg, ChannelPromise promise) ChannelFuture writeAndFlush(Object msg) 效果和先調(diào)用write然后調(diào)用flush一樣。
3. inbound方法
方法 說(shuō)明
Channel read()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 從channel中讀取數(shù)據(jù),把數(shù)據(jù)放到輸入緩沖區(qū)中,然后觸發(fā)ChannelInboundHandler#channelRead(ChannelHandlerContext, Object)和ChannelInboundHandler#channelReadComplete(ChannelHandlerContext)調(diào)用,如果之前已經(jīng)有一個(gè)read操作正在執(zhí)行或等待執(zhí)行,這個(gè)方法不會(huì)有任何影響。
Unsafe接口定義
方法 說(shuō)明
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() 立即關(guān)閉channel,并且不觸發(fā)任何事件。
void deregister(ChannelPromise promise) 同Channel, 必須在I/O線程中執(zhí)行
void beginRead() 為channel觸發(fā)read事件做準(zhǔn)備。如:把read事件注冊(cè)到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ù)就是追加到這個(gè)緩沖區(qū)中。 必須在I/O線程中執(zhí)行

轉(zhuǎn)載于:https://www.cnblogs.com/brandonli/p/9919562.html

總結(jié)

以上是生活随笔為你收集整理的netty源码解解析(4.0)-2 Chanel的接口设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。