boy-learning-netty | 07 Netty 如何

2019-10-17  本文已影响0人  BruceOuyang

相关源码:boy-learning-netty
个人博客:http://bruce.bugmakers.club
内容来自《极客时间 - Netty源码剖析与实战》

Netty 如何支持三种 Reactor

什么是 Reactor 及三种版本

生活场景:返点规模变化

生活场景类比

生活场景 Reactor 模式
一个人包揽所有:迎宾、点菜、做饭、上菜、送客 Reactor 单线程模式
多招几个伙计:大家一起做上面的事 Reactor 多线程模式
进一步分工:搞一个或多个专门做迎宾 主从 Reactor 多线程模式

Reactor 与三种 I/O 模式对应关系

I/O 模式 Reactor 版本
BIO Thread-Per-Connection
NIO Reactor
AIO Proactor

Reactor 是一种开发模式,模式的核心流程:

注册感兴趣的事件 -> 扫描是否有感兴趣的事件发生 -> 事件发生后做出相应的处理。

client/server SocketChannel/ServerSocketChannel OP_ACCEPT OP_CONNECT OP_WRITE OP_READ
client SocketChannel - Y Y Y
server ServerSocketChannel Y - - -
server SocketChannel - - Y Y

如何在 Netty 中使用 Reactor 模式

Reactor 单线程模式

EventLoopGroup group = new NioEventLoopGroup(1);

ServerBootstrap bootstrap = new ServerBootstrap();
bootstrap.group(group);

非主从 Reactor 多线程模式

EventLoopGroup group = new NioEventLoopGroup();

ServerBootstrap bootstrap = new ServerBootstrap();
bootstrap.group(group);

主从 Reactor 多线程模式

EventLoopGroup bossGroup = new NioEventLoopGroup(); // 这里没有 1,系统会根据cpu核数自动计算合适的数字
EventLoopGroup workerGroup = new NioEventLoopGroup();

ServerBootstrap bootstrap = new ServerBootstrap();
bootstrap.group(bossGroup, workerGroup);

解析 Netty 对 Reactor 模式支持的常见疑问

上一篇下一篇

猜你喜欢

热点阅读