Netty起源和Reactor模型

参考彻底理解Netty,这一篇文章就够了

首先先回顾传统的Http

1.创建一个ServerSocket,监听并绑定一个端口
2. 一系列客户端来请求这个端口
3. 服务器使用Accept,获得一个来自客户端的Socket连接对象
4. 启动一个新线程处理连接
4-1. 读Socket,得到字节流
4-2 解码协议,得到Http请求对象
4-3 处理Http请求,得到一个结果,封装成一个HttpResponse对象
4-4 编码协议,将结果序列化字节流 写Socket,将字节流发给客户端
5. 继续循环步骤3

当然这里因为用的是http协议所以称之为http服务器,改成别的协议就是别的服务器了。
为什么说这个呢?
因为使用Netty你就可以定制编解码协议,实现自己的特定协议的服务器,比如Dubbo就是基于Netty的,而Dubbo有自己的传输协议还可以用别的一些传输协议。

现在有另一个叫https协议,是基于http协议二次开发的,关于他俩的区别可以参考http和https有什么区别?

NIO

这讲到NIO是因为netty就是一个标准的NIO,说道NIO就肯定要知道BIO、NIO、AIO这三者的区别和联系,这个需要你自己去搜索,这不多啰嗦

我是写java的,你说多线程,就有NIO等,一开始我也认为是java独有的,但是事实不是,其实想想也知道,多线程是很多编程语言都有的名词,那NIO它们肯定也有

NIO俗称IO多路复用,它是由操作系统提供的系统调用,早期这个操作系统调用的名字是select,是慢慢的更新换代,补丁什么的就演化成了Linux下的epoll

Netty就是基于Java NIO技术封装的一套框架,所以你可以认为Nettyjava所独有的,但是NIO不是,
对于为什么封装如果你学过javaweb框架你就会明白这里面的区别是多么的便捷,还有一个重要原因是因为有空轮询的Bug,最后一个不怎么了解,你可以百度一下

Reactor模型

这为什么说这个模型呢?
因为这个模仿了NIO也就是IO多路复用
别人画的模型很好,虽然有的地方还是不准确,我就不画了,直接copy了

(1)Reactor单线程模型

在这里插入图片描述
看这张图和介绍大家可能看懂了,但是一开始我没看懂,仔细琢磨才看懂。这个真像上面传统的Http

原理: 可以先不看绿色的acceptorclient是客户端,Reactor 负责给客户端的请求发送到read ,而read后面是串行的逻辑程序,执行完再通过send 发送给Reactor,再通过Reactor返回给客户端,readsend 那一段可以想象成后端程序,就露了两个接口,接收数据发送数据。而acceptor你可以理解为不是通过client 连接Reactor的,比如淘宝不光可以用客户端访问,也可以通过网页访问

(2) Reactor多线程模型

在这里插入图片描述
Thread Poolworkerthreads就是我们经常干后端所用的线程池,各种线程池都有,可以是人家的C3P0,也可以自己创建一个线程池,关于线程池就不多讲了。

(3) Reactor主从模式

在这里插入图片描述
这个图中acceptor 的功能可以和图一相同。

主从模式和平常的主从模式还是有区别的,很像zookeeper的主从模式,主节点负责接收信息,处理信息交给从节点。
上面的介绍可以,基本上不用再说明。

总结:

Netty又是NIO的基础上,所以上面这三种Netty都可以配置。
当然 acceptor 也可以用单独的线程池,这样更加灵活。
对于线程池也可以合并,这个合并就看你自己怎么满足自己的高性能的并发模型了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值