Netty能干什么?
Http服务器
使用Netty可以编写一个 Http服务器, 就像tomcat那样,能接受用户发送的http请求, , 只不过没有实现Servelt规范, 但是它也能解析携带的参数, 对请求的路径进行路由导航, 从而实现将不同的请求导向不同的handler进行处理
对socket与RPC的支持
Netty可是实现的第二件事就是Socket编程,也是它最为广泛的应用领域
进行微服务开发时不可丢弃的一个点, 服务和服务之间如果使用Http通信不是不行,但是http的底层使用的也是socket, 相对我们直接使用netty加持socket效果会更好 (比如阿里的Dubbo)
当然Netty能做的事还有很多比如自定义通信协议等等,,,
对WebSocket的支持
Netty对WebSocket也提供了强大的支持, netty内置的处理器会为我们做好大量的机械性麻烦性的工作, 如WebSocketServerProtocolHandler
内置编解码处理, 心跳检验等, 可以让我们专注于实现自己的业务逻辑
Reactor线程模型
Reactor线程模型, 顾名思义就像核反应堆一样, 是一种很劲爆的线程模型
最经典的两种图就像下面这样
上面两种图所描述的都是Reactor线程模型
Reactor线程模型五大角色
- handle
handle本质上表示是一种资源 , 在不同的操作系统上他们的名称又不一样, 比如在windows上成它为文件句柄 , 而在linux中称它为文件描述符, 其实我这样说, handle的概念就显得比较抽象 不容易理解 , 具体一点说handle是啥呢 ? 比如客户端向服务端发送一个连接请求,这个socket请求对操作系统来说, 本质上就是handle
在Reactor线程模型中的Handle 就是限制netty并发量的主要原因, 下面的调优主要也是为了突破这个限制
- Synchronius Event Demultiplexer
意为同步事件分离器, 也是一看这个名字完全没有头绪它是什么, 其实, 在本质上它是一个操作系统层面的系统调用, 操作系统用它来阻塞的等待事件的发生, 具体一点它来说, 比如它可以是Linux系统上的IO多