前言
本系列为本人Java编程方法论 响应式解读系列的Webflux
部分,现分享出来,前置知识Rxjava2 ,Reactor的相关解读已经录制分享视频,并发布在b站,地址如下:
Rxjava源码解读与分享:https://www.bilibili.com/video/av34537840
Reactor源码解读与分享:https://www.bilibili.com/video/av35326911
NIO源码解读相关视频分享: https://www.bilibili.com/video/av43230997
NIO源码解读视频相关配套文章:
BIO到NIO源码的一些事儿之NIO 下 之 Selector
BIO到NIO源码的一些事儿之NIO 下 Buffer解读 上
BIO到NIO源码的一些事儿之NIO 下 Buffer解读 下
Java编程方法论-Spring WebFlux篇 01 为什么需要Spring WebFlux 上
Java编程方法论-Spring WebFlux篇 01 为什么需要Spring WebFlux 下
Java编程方法论-Spring WebFlux篇 Reactor-Netty下HttpServer 的封装
其中,Rxjava与Reactor作为本人书中内容将不对外开放,大家感兴趣可以花点时间来观看视频,本人对着两个库进行了全面彻底细致的解读,包括其中的设计理念和相关的方法论,也希望大家可以留言纠正我其中的错误。
本书主要针对Netty
服务器来讲,所以读者应具备有关Netty
的基本知识和应用技能。接下来,我们将对Reactor-netty
从设计到实现的细节一一探究,让大家真的从中学习到好的封装设计理念。本书在写时所参考的最新版本是Reactor-netty 0.7.8.Release
这个版本,但现在已有0.8
版本,而且0.7
与0.8
版本在源码细节有不小的变动,这点给大家提醒下。我会针对0.8
版本进行全新的解读并在未来出版的书中进行展示。
TcpServer的功能实现
这里,我们会首先解读Reactor Netty
是如何针对Netty
中Bootstrap
的ChildHandler
进行封装以及响应式拓展等一些细节探究。接着,我们会涉及到HttpHandler
的引入,以此来对接我们上层web服务。
针对Bootstrap的ChildHandler的封装
因为这是我们切入自定义逻辑的地方,所以,我们首先来关注下与其相关的ChannelHandler
,以及前文并未提到的,服务器到底是如何启动以及如何通过响应式来做到优雅的关闭,首先我们会接触关闭服务器的设定。
ChannelHandler引入与使用响应式优雅关闭服务器
我们再回到reactor.ipc.netty.http.server.HttpServer#HttpServer
这个构造器中,由上一章我们知道请求是HTTP
层面的(应用层),必须依赖于TCP
的连接实现,所以这里就要有一个TCPServer
的实现,其实就是Channel
上Pipeline
的操作。
//reactor.ipc.netty.http.server.HttpServer#HttpServer
private HttpServer(HttpServer.Builder builder) {
HttpServerOptions.Builder serverOptionsBuilder = HttpServerOptions.builder();
...
this.options = serverOptionsBuilder.build();
this.server = new TcpBridgeServer(this.options);
}
复制代码
这里的话在DiscardServer Demo
中,TCPServer
我们主要针对childHandler
的内容的封装,也就是如下内容:
b.group(bossGroup, workerGroup)
...
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) throws Exception {
ch.pipeline().addLast(new DiscardServerHandler());
}
})
...
复制代码
那childHandler
到底代表什么类型,我们可以在io.netty.bootstrap.ServerBootstr