![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Netty
文章平均质量分 64
欧阳田
生活没有对与错,一路爬行。
展开
-
设计一个软件技术产品需要考虑到哪些问题?
背景站在高维度的角度上,设计一个软件技术产品,需要考虑到什么?架构设计质量考量的点易用性(详细文档,开发方便)过程架构,就是分层。把层隔离出来。概念、职责分明。模仿Netty,分离出多层来。每一层都做自己的事情。Netty的逻辑架构设计理解Corda是怎么做分层设计的?节点与节点之间通过网络进行交互。一个节点中,通过RPC Client或者Web Servic...原创 2020-02-10 16:23:18 · 1504 阅读 · 0 评论 -
Netty在质量上考量的点有哪些?
背景高性能可靠性可定制性可扩展性易用性安全性过程Netty的高性能体现在哪儿?Reactior模式的使用直接内存池化内存环形数组缓冲区。实现无锁化的并发编程,比如使用轻量级的ThreadLocal,使用轻量级的同步关键字volatile。比如使用Atomic系列类。比如使用CountDownLatch, CyclicBarrerier。比如使用线程安全容器。Li...原创 2020-02-10 15:43:03 · 245 阅读 · 0 评论 -
Netty的逻辑架构设计理解
背景模仿Netty的架构设计,探索原因。Netty的逻辑架构设计,是怎样的?Netty的逻辑架构设计,为什么是合理的?过程Netty的逻辑架构设计,来源书籍《Netty权威指南》a) Reactor通信调度层监听网络的读写和连接操作,负责将网络层的数据读取到内存缓冲区中,然后触发各种网络事件,例如连接创建,连接激活,读事件,写事件等,将这些事件触发到Pipeline中,由...原创 2020-02-10 10:14:02 · 1214 阅读 · 0 评论 -
Netty进阶学习(七):Netty#doBind()#doBind0()理解
背景那个线程执行了doBind0()方法?doBind0()方法中,最终是调用了哪个实例的方法?最底层是哪个实例执行了bind()方法?过程入口代码eventLoop线程执行bind()逻辑。后续代码过程小结doBind0(是pipeline.bind(local, promis)执行),最终还是javaChannel().bind(localAddress,...原创 2020-02-01 12:02:24 · 2422 阅读 · 0 评论 -
Netty进阶学习(六):Netty#initAndRegister#register()理解
背景究竟是哪个线程执行了doRegister()方法?Channel实例是谁?Selector实例是谁?又怎么绑定到NioEventLoop上的?过程EventLoop执行register0()#doRegister()方法启动的时候是main主线程,并不是EventLoop线程。然后new一个任务的方式丢到EventLoop中,它是放到队列中的,然后启动线程。这个时候才会去...原创 2020-02-01 11:30:18 · 687 阅读 · 1 评论 -
Netty进阶学习(五):Netty#initAndRegister#init()理解
背景有哪些小知识点可以学习的?有哪些逻辑处理可以学习的?过程init方法概览说明一般来说,使用Netty的最佳实践,我们会使用主从模式,就是bossGroup和workerGroup。而且bossGroup是一个线程的线程池,workerGroup一般是电脑内核数量的线程数的线程池。在Netty中,pipeline中一定是添加的handler,所以这个ServerBoots...原创 2020-01-01 12:24:41 · 369 阅读 · 0 评论 -
Netty进阶学习(四):Netty#initAndRegister()理解
背景它是怎么设计初始化逻辑和注册逻辑的?这段代码有哪些可以借鉴学习的?过程initAndRegister()方法概览说明前面的代码逻辑对channelFactory实例进行了非空检查。channelFactory.newChannel()是怎么获取到的?推荐阅读初始化逻辑,init(channel)然后执行注册逻辑,config().group().register(...原创 2019-12-31 21:49:55 · 323 阅读 · 0 评论 -
Netty进阶学习(三):Netty#doBind()的理解
背景学习源码写作方式。学习源码的考虑方式。理解源码做了什么。过程从Server端绑定端口bind()入口。说明对参数进行验证,然后调用doBind()方法,并对方法需要的参数进行验证。验证了什么?group(线程池实例是否有),channelFactory(通道工厂实例是否有),需要绑定的端口号是否有?能够学到什么?a) 在高层代码逻辑块里,应该是一句话的写作...原创 2019-12-31 17:17:35 · 566 阅读 · 2 评论 -
Netty进阶学习(二):I/O模型的二次理解
背景bind()方法是最核心的一个方法,它承载着Netty服务端的启动和注册相关功能逻辑。能够从bind()逻辑中学到哪些知识?过程小结原创 2019-12-31 11:56:32 · 187 阅读 · 0 评论 -
Netty进阶学习(一):学习一个新技术的大致思路是什么?
背景bind()方法是最核心的一个方法,它承载着Netty服务端的启动和注册相关功能逻辑。能够从bind()逻辑中学到哪些知识?过程小结原创 2019-12-31 09:55:49 · 374 阅读 · 2 评论 -
Netty入门学习(十):Netty的ChannelFuture学习
背景Netty的ChannelFuture接口继承自Netty的Future接口。需要理解Netty的Future与JDKFuture相互之间的异同。Netty的Future与JDK的Future学习过程小结原创 2019-12-16 12:09:42 · 536 阅读 · 0 评论 -
Corda中如何使用Netty?
Corda是什么?Corda is an open-source blockchain platform.节点与节点之间通过RPC调用,最终完成一个分布式账本。Corda使用Netty概况总览说明1,采用主从模式。2,使用NioServerSocketChannel::class.java反射方式创建channel实例。创建channel实例过程理解3,为workerG...原创 2019-12-11 21:33:04 · 505 阅读 · 0 评论 -
Netty入门学习(九):Netty的Future与JDK的Future学习
背景理解在一个异步编程中的Future含义(JDK)。会存在缺陷。事件驱动的异步编程的Future的含义(Netty)。添加监听器逻辑(观察者设计模式)。理解Netty的Future与JDK的Future的核心类继承体系结构图JDK 的Future学习Future定义代表异步计算的结果。提供的功能检测计算是否已经完成;阻塞等待计算的完成;获取异步计算结果;...原创 2019-10-27 19:38:55 · 439 阅读 · 0 评论 -
Netty入门学习(八):Netty创建NioEventLoopGroup实例过程中使用到的设计模式
背景了解Netty中NioEventLoopGroup和JDK中的Executor的继承关系。NioEventLoopGroup目的:创建一个NioEventLoopGroup对象。使用了工厂方法设计模式。使用了代理设计模式。使用了命令设计模式。使用了装饰设计模式。类图创建NioEventLoopGroup实例的核心类图关系说明NioEventLoopGroup继承了...原创 2019-10-27 11:57:38 · 474 阅读 · 0 评论 -
Netty入门学习(七):Netty服务端ServerBootstrap与客户端Boostrap的结构体系
背景记录Netty服务端ServerBootstrap和客户端Bootstrap的结构体系ServerBootstrap与Bootstrap小结Netty服务端使用ServerBootsrap类。Netty客户端使用Bootstrap类。Bootstrap类提供了connect()方法,通常用于TCP连接方式。AbstractBootstrap类提供了bind()方法,通...原创 2019-10-18 16:33:18 · 467 阅读 · 0 评论 -
Netty入门学习(六):Netty如何满足Reactor模式的三种应用?
背景Netty是Reactor模式的一个实践。Netty服务端如何做才能满足Reactor模式的三种应用?服务端:Netty的标准使用MyServerpublic class MyServer { public static void main(String[] args) throws InterruptedException { EventLoop...原创 2019-10-18 16:22:44 · 200 阅读 · 0 评论 -
Netty入门学习(五):Netty通过反射方式获取NioServerSocketChannel对象过程代码
背景在服务端使用Netty的一个标准做法: EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workGroup = new NioEventLoopGroup(); try{ ServerBootstrap serverBootstrap = ne...原创 2019-10-18 15:52:18 · 857 阅读 · 0 评论 -
Netty入门学习(四):EventLoopGroup和NioEventLoopGroup的继承体系
背景对于Netty的使用,都会使用bossGroup和workerGroup的方式,而常说的bossGroup和workerGroup其实是NioEventLoopGroup的实例。在Netty中,EventLoopGroup和NioEventLoopGroup其实就是一个线程池。EventLoopGroup和NioEventLoopGroup的继承体系Netty中的EventL...原创 2019-10-17 21:17:47 · 2494 阅读 · 0 评论 -
Netty学习前的基础知识(二):传统I/O的缺陷及发展过程
背景了解传统I/O的缺陷和I/O的发展过程。基础知识I/O缺陷a) 没有数据缓冲区,I/O性能存在问题。b)没有C或者C++中的Channel概念,只有输入和输出流。c)同步阻塞式I/O通信(BIO),通常会导致通信线程被长时间阻塞。d)支持的字符集有限,硬件移植性不好。在Java支持异步I/O之前的很长一段时间里,高性能服务端开发领域一直被C++和C长期占据。Java的同步...原创 2019-10-07 13:14:25 · 214 阅读 · 2 评论 -
Netty学习前的基础知识(三):Linux网络I/O模型简介
背景Linux的内核将所有的外部设备都看做一个文件来操作,对一个文件的读写操作会调用内核提供的系统命令,返回一个file descriptor(fd,文件描述符)。而对一个socket的读写也会有相应的描述符,称为socketfd(socket描述符),描述符就是一个数字,它指向内核的一个结构体(文件路径,数据区等一些属性)。NNIX提供了5种I/O模型阻塞I/O模型:一请求一线程一应答。...原创 2019-10-07 13:36:50 · 242 阅读 · 1 评论 -
Netty学习前的基础知识(四):Reactor论文学习之理解5大角色
背景在学习Netty之前,有必要学习Reactor论文中的知识。Reactor反应器模式:a)它处理一个或者多个客户端发来的请求。b) 想象成由多个方法组成的一个服务。c) Selector接收所有的请求。Dispatcher中一开始就注册了handler,这个时候dispatcher进行事件分发给具体的handler进行处理,这些所有的handler都被添加到ChannelPi...原创 2019-10-07 13:54:47 · 274 阅读 · 0 评论 -
Netty学习前的基础知识(五):Reactor论文学习之工作流程
背景记录和理解Reactor工作流程。工作流程当应用向Initiation Dispatcher注册具体的事件处理器,应用会标识出该事件处理器希望Initiation Dispatche在某个事件发生时向其通知的该事件,该事件于Handle关联。Initiation Dispatcher会要求每个事件处理器向其传递内部的Handle。该Handle向操作系统标识了事件处理器。当所有...原创 2019-10-07 13:59:58 · 210 阅读 · 0 评论 -
Netty学习前的基础知识(六):Doug Lea的nio文档学习之古典的网络编程服务设计
背景学习Netty之前,学习Doug Lea的nio知识。Doug Lea是包 java.nio 的作者。Classic Service Designs(古典的网络编程服务设计)Web services, Distributed Objects, etc. Most have same basic structure: Read request;Decode request;Proces...原创 2019-10-07 14:33:41 · 698 阅读 · 0 评论 -
Netty学习前的基础知识(七):Doug Lea的nio文档学习之Reactor单线程版本
背景内容来自Doug Lea的nio文档。基本的Reactor设计。单线程版本。记录和梳理知识方便以后复习和查阅。Reactor的基本设计(单线程版本)Single threaded versionJava NIO的支持实现伪代码过程a)第一步b) 第二步c) 第三步d) 第四步e) 第五步小结整理记录Reactor的单线程版本。...原创 2019-10-07 14:57:06 · 706 阅读 · 0 评论 -
Netty学习前的基础知识(八):Doug Lea的nio文档学习之Reactor多线程版本
背景记录对Reactor多线程版本的实现过程Reactor多线程版本结构图(添加了Woker threads pool)Handler with Thread PoolCoordinating TasksUsing PooledExecuto小结Reactor的单线程基础上实现多线程的worker threads pool....原创 2019-10-07 15:06:49 · 294 阅读 · 0 评论 -
Netty学习前的基础知识(九):Doug Lea的nio文档学习之Reactor最佳做法
背景记录Reactor模式的最佳实践过程。内容来自Doug Lea的nio文档。Reactor模式的最佳实践结构图Multiple Reactor ThreadsUsing other java.nio featuresConnection -Based Extensions小结拆分Reactor演进过程,梳理知识。...原创 2019-10-07 15:15:06 · 557 阅读 · 0 评论 -
Netty入门学习(一):Netty与Reactor模式的最佳做法的关系?
背景Reactor模式,即反应器模式。Netty整体架构是Reactor模式的完整体现。Reactor模式基本都应用在网络编程。而Netty其实是Java网络编程的杰出开源框架。Reactor是异步,事件驱动,多线程的。Netty是事件为中心,事件驱动的,Netty是理论Reactor模式的实践。传统网络编程传统基于阻塞io编写的ServerSocket,是一个用户一个线程新分...原创 2019-10-07 15:52:00 · 1049 阅读 · 6 评论 -
Netty入门学习(二):为什么有Netty?
背景根据Reactor模式论文和Doug Lea的nio文档,可以在java.nio包下实现网络编程功能,但是依然很繁琐细节。通过各种技术的发展过程来理解为什么有Netty?Netty为什么存在?传统io在socket中的缺陷。一请求一线程一应答。所以才有JDK1.4的NIO出现,后面也有JDK1.7对NIO的优化。Java I/O(JDK1.0)到Java NIO(JDK1.4...原创 2019-10-07 16:18:10 · 180 阅读 · 0 评论 -
Netty入门学习(三):从解决问题过程理解为什么有Netty?
背景为什么Java如此盛行?a) 支持异构平台。b) Spring的生态圈。c) 丰富类库和第三方框架。现在第三方框架怎样才能盛行?a) 支持异构平台,异构语言。比如gRPC。b) 能够解决痛点问题,比如JVM解决跨平台问题。Netty能够解决Java在网络编程的缺陷问题。c) 易用。易用性主要体现在,产品设计的概念符合人类直觉,概念简单。概念间的关系清晰,组织逻辑结构明确...原创 2019-10-07 16:55:44 · 435 阅读 · 0 评论 -
Netty学习前的基础知识(一):Java I/O 系统
背景记录java io基础知识。基础知识流的概念Java程序通过流来完成输入/输出。流是生产或者消费信息的抽象。流通过Java的输入/输出系统与物理设备连接。尽管与他们连接的物理设备不尽相同,所有流的行为具有同样的方式。这样相同的输入/输出类和方法适用于所有类型的外部设备。这意味着一个输入流能够抽象多种不同类型的输入:从磁盘文件,从键盘或者网络套接字。同样,一个输入流可以输出到控制台,磁...原创 2019-10-07 12:16:25 · 490 阅读 · 2 评论