Java编程方法论-Spring WebFlux篇 Reactor-Netty下TcpServer的功能实现 1

本文是Java编程方法论的一部分,介绍了如何使用Reactor-Netty实现TcpServer,重点讨论了Bootstrap的ChildHandler封装,包括响应式优雅关闭服务器和ChannelHandler的应用。内容涉及NIO、Rxjava和Reactor的源码解读,适合有一定基础知识的读者学习。
摘要由CSDN通过智能技术生成

前言

本系列为本人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源码的一些事儿之BIO

BIO到NIO源码的一些事儿之NIO 上

BIO到NIO源码的一些事儿之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.70.8版本在源码细节有不小的变动,这点给大家提醒下。我会针对0.8版本进行全新的解读并在未来出版的书中进行展示。

TcpServer的功能实现

这里,我们会首先解读Reactor Netty是如何针对NettyBootstrapChildHandler进行封装以及响应式拓展等一些细节探究。接着,我们会涉及到HttpHandler的引入,以此来对接我们上层web服务。

针对Bootstrap的ChildHandler的封装

因为这是我们切入自定义逻辑的地方,所以,我们首先来关注下与其相关的ChannelHandler,以及前文并未提到的,服务器到底是如何启动以及如何通过响应式来做到优雅的关闭,首先我们会接触关闭服务器的设定。

ChannelHandler引入与使用响应式优雅关闭服务器

我们再回到reactor.ipc.netty.http.server.HttpServer#HttpServer这个构造器中,由上一章我们知道请求是HTTP层面的(应用层),必须依赖于TCP的连接实现,所以这里就要有一个TCPServer的实现,其实就是ChannelPipeline的操作。

//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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值