Netty入门学习(三):从解决问题过程理解为什么有Netty?
背景
为什么Java如此盛行?
a) 支持异构平台。b) Spring的生态圈。
c) 丰富类库和第三方框架。
现在第三方框架怎样才能盛行?
a) 支持异构平台,异构语言。比如gRPC。b) 能够解决痛点问题,比如JVM解决跨平台问题。Netty能够解决Java在网络编程的缺陷问题。
c) 易用。易用性主要体现在,产品设计的概念符合人类直觉,概念简单。概念间的关系清晰,组织逻辑结构明确。
d) 有社区。
Java
Java类库依然有缺陷。现实世界又是如何解决的?
a) 有guava包,commons包对Java类库的一个补充。
b) 传统I/O是阻塞I/O,这样的I/O在socket通信时,有着非常大的阻碍,也阻止了Java的高并发网络编程的发展。JDK1.4的时候,对传统的io进行了升级,非阻塞I/O,它带来了新的概念,比如Buffer,Channel,Future,Selector,这样多路复用的思维模式。但是对于文件系统来说,依然是阻塞的工作模式,但是对于socket通信来说,这样的非阻塞多路复用的模式,带了根本性发展,而且还带来了新的知识零拷贝。直到JDK1.7的时候,NIO又进行了升级,这个时候被称作AIO,是真正意义上对文件系统支持异步操作,根据Douglea的nio文档,和java.nio提供的API,是可以写一个高并发的网络服务程序,但是非常繁琐,于是基于NIO的基础写了一个第三方库Netty。
Netty
Netty的由来历程:
a) 是因为从传统的socket I/O它一请求一应答,并且应对每一个请求都会创建一个线程,而且线程对于操作系统来说是非常珍贵的资源,线程越多,操作系统进行上下文切换的时候,也非常耗费资源。
b) 随着NIO的发展以及Reactor模式对解决多个客户端的并发请求的方案的成熟。这个Reactor模式的工作过程就说明了,它能够支持大量请求,它能够解决传统I/O面对的问题。
c) 于是Netty充分运用Reactor反应器模式,这也是它为什么有bossGroup和workGroup的概念,为什么有Selector, ChannelFuture, SelectionKey, Buffer的概念。它把客端发来的请求,全部封装为事件,连接事件,解码事件,计算事件,编码事件,响应事件。而所有的这些事件全是在handler中处理。
d) 理解为什么Netty存在?需要先理解为什么Reactor存在。
理解为什么Reactor存在?需要理解为什么NIO存在?
理解NIO为什么存在?需要理解I/O的演进过程。
小结
- Java是一门编程语言,它也不能解决所有问题。出现的第三方框架(Netty)就是来解决Java解决不了的问题。
- 最后:Netty带着Reactor反应器模式的思想,利用Java NIO提供的API进行了高层次的封装。
还没有评论,来说两句吧...