《Netty学习》(三)Channel学习
来源:互联网 发布:淘宝88会员是什么意思 编辑:程序博客网 时间:2024/06/13 05:43
- 什么是channel
- 它是数据在网络传输过程中的载体,拥有着不同的传输类型,包含我们熟悉的阻塞传输(oio)和异步传输(nio),拥有操作底层网络api的能力。
- 个人理解:如果网络传输像两个岛屿之间的货物传输,那么channel就像那只船。不同的传输类型对应着不同的航行方式。
在netty中Channel
- 生命周期
- channelUnregistered
- channel已经被创建,还没有注册到eventLoop(后面会讲到)
- channelRegistered
- 已经注册到eventLoop
- channelActive
- channel处于活动状态(连接到远程节点)。可以进行传输
- channelInactive
- channel没有连接到远程节点
- channelUnregistered
因为允许从eventLoop中注销channel,然后重新注册。所以可以看到多个channelUnregistered和channelRegistered之间的变化,但是channelActive和channelInactive永远只有一个。一个channel通道在它的生命周期只能连接一次,之后就会被回收,重新连接会产生新的通道。
- channel的类结构
-
首先我们能看到channel拥有着AttritubeMap和Comparable接口的能力,使其能成为一个独一无二的载体工具。
每一个channel都独立拥有一个channelPipeline(管道,监听管理着channel)和channelConfig(配置)- channel的api
- eventLoop 返回该channel的eventLoop
- pipeline 返回该channel的channelPipeline
- isActive 是否处于活动状态
- localAddress 返回绑定的本地SocketAddress
- remoteAddress 返回连接的远程节点SocketAddress
- write 写数据
- flush 冲刷数据
- writeAndFlush
- 生命周期
Netty传输类型
异步传输nio
它使用selector选择器提供了完全异步的方式操作io。选择器基本概念是充当一个注册表,在哪里将请求在channel 的状态发生的变化得到通知,可能的状态变化:
- 新的channel以被接受并且可以使用
- channel 连接完成
- channel 存在可读的数据
- channel 可以写数据
处理完改变的状态后需要重新设置他们的状态,用一个线程来检查是否有可使用的channel,如果有则执行相关的事件。选择器的所支持的操作在SelectionKey中通过常量定义: ![这里写图片描述](http://img.blog.csdn.net/20170910152435688?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM3OTM0MzI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)接下来看选择器的处理流程图![这里写图片描述](http://img.blog.csdn.net/20170910153011397?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM3OTM0MzI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
- Netty支持的其他网络传输类型:
Epoll:用于linux的本地非阻塞传输
OIO : 我们熟知的阻塞io (old io);
Local : 用于jvm内部通信的local传输
Embedded : 用于单元测试的传输类型
这里我们主要讲了nio,其他的可以自行扩展。
以上只是我个人理解,仅供参考,如有错误,请包涵指正!
阅读全文
0 0
- 《Netty学习》(三)Channel学习
- 学习 java netty (三) -- Channel
- netty源码学习三(channel、channelHandler、channelPipeline)
- netty学习之Channel接口
- Netty学习之旅------Netty Channel 概述
- Netty学习之NIO---通道Channel(一)
- Netty学习笔记(二) Channel和ChannelFuture
- Netty学习之三
- java学习-NIO(三)Channel
- Netty学习(三)-Netty重要接口讲解
- netty学习(三)ChannelInboundHandler和ChannelOutboundHandler
- netty学习四:监听channel的读写空闲情况
- Netty源码解读(三)Channel与Pipeline
- Netty那点事(三)Channel中的Pipeline
- Netty那点事(三)Channel与Pipeline
- Netty源码解读(三)Channel与Pipeline
- 【转】Netty那点事(三)Channel中的Pipeline
- Netty源码解读(三)Channel与Pipeline
- 12、数据结构笔记之十二栈的应用之栈与递归之阶乘实现
- vue---组件注册
- python unittest 继承时出现 object has no attribute '_testMethodDoc'
- Add Two Numbers(算法分析week1)
- 词向量源码解析:(3.3)GloVe源码解析之cooccur
- 《Netty学习》(三)Channel学习
- 13、数据结构笔记之十三栈的应用之栈与递归之斐波那契数列
- JS面试常见算法题
- 操作系统--并发与并行
- 算法:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
- javax.mail.AuthenticationFailedException: 535 Error: authentication failed
- tap 和click 事件区别
- 双缓冲技术绘图原理及简单的VC实现
- flask_sqlalchemy