Netty组件之Channel实例化( 二 )

小结:默认的ChannelId由machineId、processId、sequence、timestamp、random构成 。machineId:可以由参数io.netty.machineId自定义 , 默认为8位随机byte构成
processId:可以由参数io.netty.processId自定义 , 默认为4位进程ID
sequence:原子自增序号AtomicInteger , 每创建一个Chanenl会进行自增
timestamp:8位的timestamp
random:4位的随机整数
@2 unsafe初始化
unsafe即I/O的核心操作 , byte的读写都靠它来处理 。服务端NioServerSocketChannel初始化使用NioMessageUnsafe 。客户端NioSocketChannel初始化使用NioSocketChannelUnsafe 。以NIO为例看下Unsafe的类图结构 。

Netty组件之Channel实例化

文章插图
unsafe类图结构
@3 ChannelPipeline初始化
默认使用DefaultChannelPipeline , 从构造方法可以看出为链表结构 , 详细分析另文分析 。
protected DefaultChannelPipeline(Channel channel) {this.channel = ObjectUtil.checkNotNull(channel, "channel");succeededFuture = new SucceededChannelFuture(channel, null);voidPromise =new VoidChannelPromise(channel, true);tail = new TailContext(this);head = new HeadContext(this);head.next = tail;tail.prev = head;}




推荐阅读