-
Netty-11-EventLoop 之线程模型
知识准备
简单地说,线程模型指定了操作系统、编程语言、框架或者应用程序的上下文中的线程管理的关键方面。
显而易见地,如何以及何时创建线程将对应用程序代码的执行产生显著的影响,因此开发人员需要理解与不同模型相关的权衡。
无论是他们自己选择模型,还是通过采用某种编程语言或者框架隐式地获得它,这都是真实的。
在本章中,我们将详细地探讨Netty 的线程模型。
它强大但又易用,并且和Net...
2017-11-16 11:23:06 |
Netty
-
Netty-11-EventLoop 之任务调度实现
实现细节
这一节将更加详细地探讨Netty 的线程模型和任务调度实现的主要内容。
我们也将会提到需要注意的局限性,以及正在不断发展中的领域。
线程管理
Netty线程模型的卓越性能取决于对于当前执行的Thread的身份的确定它是否是分配给当前Channel以及它的EventLoop的那一个线程。
(回想一下EventLoop将负责处理一个Channel的整个生命周期内的所有事件。)...
2017-11-16 11:23:06 |
Netty
-
Netty-11-EventLoop 之任务调度
任务调度
偶尔,你将需要调度一个任务以便稍后(延迟)执行或者周期性地执行。
例如,你可能想要注册一个在客户端已经连接了 5 分钟之后触发的任务。
一个常见的用例是,发送心跳消息到远程节点,以检查连接是否仍然还活着。如果没有响应,你便知道可以关闭该Channel 了。
在接下来的几节中,我们将展示如何使用核心的Java API 和Netty 的EventLoop 来调度任务。
然后,...
2017-11-16 11:23:06 |
Netty
-
Netty-11-EventLoop 之接口 API
EventLoop 接口
运行任务来处理在连接的生命周期内发生的事件是任何网络框架的基本功能。
与之相应的编程上的构造通常被称为事件循环—一个 Netty 使用了 interface io.netty.channel.EventLoop 来适配的术语。
定义
Netty的EventLoop在继承了ScheduledExecutorService的同时,只定义了一个方法,parent(...
2017-11-16 11:23:06 |
Netty
-
Netty-10-资源管理
资源释放注意事项
需要释放的场景
ByteBuf 是Netty中主要用来数据byte[]的封装类,主要分为Heap ByteBuf 和 Direct ByteBuf。
为了减少内存的分配回收以及产生的内存碎片,Netty提供了PooledByteBufAllocator 用来分配可回收的ByteBuf,可以把PooledByteBufAllocator看做一个池子,需要的时候从里面获取...
2017-11-16 11:23:06 |
Netty
-
Netty-10-ChannelPipeline API
ChannelPipeline 接口
每一个新创建的Channel都将会被分配一个新的ChannelPipeline。这项关联是永久性的;Channel既不能附加另外一个ChannelPipeline,也不能分离当前的。
根据事件的起源,事件将会被ChannelInboundHandler或者ChannelOutboundHandler处理。随后,会调用ChannelHandlerCon...
2017-11-16 11:23:06 |
Netty
-
Netty-09-ByteBuf API
引言
ByteBuf 是对 ByteBuffer 的改进。可见一个接口设计的不好,就会被别人推翻。实现不好就算了,接口一定要设计好。
个人理解
学习的时候知道关键的概念,和固定的方法分类。
理解每一种方法的使用场景,但是不需要记忆。
对比学习。netty 是对 ByteBuffer 的改良。结合一起理解,会更加简单。
...
2017-11-16 11:23:06 |
Netty
-
Netty-08-数据传输之 BIO NIO
基础知识
Internet(全球互联网)是无数台机器基于TCP/IP协议族相互通信产生的。TCP/IP协议族分了四层实现,链路层、网络层、传输层、应用层。
与我们应用开发者接触最多的应该是应用层了,例如web应用普遍使用HTTP协议,HTTP协议帮助我们开发者做了非常多的事情,通过HTTP足以完成大部分的通信工作了,但是有时候会有一些特殊的场景出现,使得HTTP协议并不能得心应手的完成工...
2017-11-16 11:23:06 |
Netty