博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Netty Channel
阅读量:6420 次
发布时间:2019-06-23

本文共 1948 字,大约阅读时间需要 6 分钟。

hot3.png

Channel是Netty最核心的接口,一个Channel就是一个Socket的通道,通过Channel可以对Socket进行各种操作。

ChannelHandler:
ChannelHandler用来间接控制Channel,通过继承ChannelHandler可以实现自己的Handler处理Channel事件,一个ChannelHandler可以被加到多个ChannelPipeline中,程序中我们一般直接继承ChannelInboundHandlerAdapter。
ChannelHandlerContext:
ChannelHandlerContext代表ChannelHandler和ChannelPipeline之间的关联,并在ChannelHandler添加到ChannelPipeline时创建一个实例。ChannelHandlerContext的主要功能是管理通过同一个ChannelPipeline 关联的ChannelHandler之间的交互。重要的是在Channel或者ChannelPipeline上调用write()都会把事件在整个管道传播,但是在ChannelHandler级别上,从一个处理程序转到下一个却要通过在 ChannelHandlerContext调用方法实现,ChannelHandlerContext会将事件传给下一个ChannelHandler。
ChannelPipeline:
ChannelPipeline实际上应该叫做ChannelHandlerPipeline,可以把ChannelPipeline看成是一个ChandlerHandler的链表(由ChannelHandlerContext串连起来),当需要对Channel进行某种处理的时候,Pipeline负责依次调用每一个Handler进行处理。每个Channel都有一个属于自己的Pipeline,调用Channel的pipeline()方法可以获得Channel的Pipeline,调用Pipeline#channel()方法可以获得Pipeline的Channel。
NioServerSocketChannel:
NioServerSocketChannel封装了一个ServerSocketChannel,ServerSocketChannel继承了AbstractSelectableChannel实现了SelectableChannel接口从而可以注册到Selector中去,ServerSocketChannle accept返回一个SocketChannel。
NioServerSocketChannel继承的是io.netty.channel.socket.ServerSocketChannel
NioServerSocketChannel封装的是java.nio.channels.ServerSocketChannel
方法:
    1. newSocket( )
    newSocket方法调用java.nio.channels.ServerSocketChannel new Socket方法,使用默认SelectorProvider openServerSocketChannel创建一个ServerSocketChannel
    2. doMessages(list)
    doMessages方法接收新的连接创建新的NioSocketChannel
NioSocketChannel:
NioSocketChannel封装了一个SocketChannel提供了更多方法,SocketChannel继承AbstractSelectableChannel实现了SelectableChannel接口从而可以注册到Selector中去,NioSocketChannel大部分方法都是调用java.nio.channels.SocketChannel的方法。
NioSocketChannel继承的是io.netty.channel.socket.SocketChannel
NioSocketChannel封装的是java.nio.channels.SocketChannel
方法:
    1. doConnect()
    doConnect方法直接调用java.nio.channels.SocketChannel的bind方法
    2. doWrite(buffer)
    doWrite方法直接调用java.nio.channels.SocketChannel的write方法

转载于:https://my.oschina.net/u/2950586/blog/758805

你可能感兴趣的文章
实战部署openldap主从架构
查看>>
我的技术路还很长
查看>>
第二阶段团队进展报告(4)
查看>>
Nginx:强劲的Web引擎
查看>>
vector容器与find算法
查看>>
Socket粘包问题
查看>>
python 点滴记录15:MAC OS安装MySQLdb
查看>>
JAVA教程 第五讲 AWT图形用户界面设计
查看>>
03 Managing an Oracle Instance
查看>>
PART THREE VB选择语句
查看>>
【原创】ZeroClipboard的时代或许已经过去了
查看>>
初探Windows Server 2012存储
查看>>
AIX 下查看内存命令
查看>>
二维费用的背包问题
查看>>
stm32F407之USART6的DMA工作方式
查看>>
Regsvr32命令修复系统故障
查看>>
ecshop文件结构
查看>>
smb中文乱码编码解决
查看>>
虚拟磁盘扩容
查看>>
css清除浮动
查看>>