Netty 是一个由JBOSS提供的一个java开源框架,提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序,是一个基于NIO的客户、服务器端编程框架,快速和简单的开发出一个网络应用,例如实现了某种协议的客户、服务端应用, 支持FTP、SMTP、HTTP等各种二进制文本协议
总结以上废话,以及网上各种资料,有以下几点:
- Netty提供了 客户端/服务器框架 方便快捷开发的使用 API
- 并发高 --- NIO(非阻塞IO)
- 零拷贝
对于零拷贝,就认为他是提高IO速率、性能的一种技术,后续再继续深入研究即可
相对NIO,简单扩展学习一下其他的IO
NIO : 同步非阻塞IO , 在等待的同时,还可以做其他的事情,有选择器,缓冲区,双向通道等角色
比如现有客户端client1,client2 ... ,还有一个server服务端,当发生通信的时候,(selector)选择器有自己的轮训算法,当进行通信,client1注册到selector,出现一个Channel1;client2注册到selector,也会出现一个Channel2,每个客户端注册selector都会产生一个单独Channel
Channel是一个双向通道,可以进行数据的读写,读写的数据都会到缓冲区(Buffer)
如果Channel1中没有数据,就会直接跳过空数据通道,不等待,继续Channel2
selector是一个单线程,消耗低,一般可以处理上万的客户端,客户端的增加,并不会影响他的性能
BIO : 同步阻塞IO , 早期就是排队干事, 后来优化利用线程池配合监听机制,制造出一种伪异步IO
AIO : 异步非阻塞IO ,线程发起IO请求,立即返回,不等待消息, 执行内存继续做IO操作,操作完成或者失败,通过调用注册的回调函数通知线程做IO操作完成或者失败
Netty 能做什么呢?
高可靠性的网络服务器,优性能的客户端程序应用,网络应用程序,比较协议,还有websocket,后面会用websocket来学习实践
如果直接上手NIO的话,需要具备Java多线程的知识,上手也比较困难,不易用,比如遇到网络断点,波动...
相对NIO,实用Netty更容易入手,自定制性比较强,性能很高,比如Dubbo,底层就是Netty
Netty 三种线程模型 Reactor
- 单线程模型: 所有的IO操作都是由同一个NIO线程处理的 ,适合小型应用场景
如果在高负载,高并发场景下,单线程的话,就会比较鸡肋了,即使把机子的CUP都让给他,这样场景下消息的编解码,接收,发送消息等处理,服务器就压力大,比如超时,可能客户端还会进行重试,最后服务器很可能会崩掉
- 多线程模型: 由一组NIO线程处理IO操作
使用多线程模型,那么不得不想到,利用线程池也做管理调控,后面的读写操作,都由池里的线程处理,这样比单线程模型好很多,那么人再多一点呢,百万级别的呢,Netty也提供了另一种模型
- 主从线程模型: 一组线程池接收,一组线程池处理
主线程池 处理客户端的登录,握手,安全认证等等,在链路建立完成时,将客户端放入从线程池注册,再将请求注册到从线程池,由从线程池处理编解码,读写等操作
该模型大大添加了并发性能处理请求,主从线程模型是官方推荐使用的设计模型
以上是简单粗略的学习,继续前进
-------------------------------------------------