Reactor Netty HTTP 服务器端-响应式编程-014

2024-05-10 09:04

本文主要是介绍Reactor Netty HTTP 服务器端-响应式编程-014,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 🤗 ApiHug × {Postman|Swagger|Api...} = 快↑ 准√ 省↓

  1. GitHub - apihug/apihug.com: All abou the Apihug   
  2. apihug.com: 有爱,有温度,有质量,有信任
  3. ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace

  The Next Generation API Development Platform - ApiHug 

api-hug-contact

Reactor Netty提供了易于使用和配置的 HttpServer 。它隐藏了创建HTTP服务器所需的大部分Netty的功能,并增加了Reactive Streams背压。

Reactor Netty HTTP 服务器端测试代码open in new window

#启动和停止

要想启动一个HTTP服务器,您必须创建并且配置一个 HttpServer 实例。

默认情况下,host被配置为任何的本地地址,当执行bind操作的时候系统会选择一个临时端口。下面是创建并且配置一个HttpServer实例的例子:

public static void main(String[] args) {DisposableServer server =HttpServer.create() // <1>.bindNow(); // <2>server.onDispose().block();
}
  1. <1> 创建一个HttpServer 实例用来进行之后的配置操作。
  2. <2> 使用阻塞等待的方式启动服务器,直到初始化完成。

返回的 DisposableServer 提供了简单的服务器API,包括disposeNow() ,这个方法可以以阻塞等待的方式来关闭服务器。

负责实例的创建是 HttpServerBind, 配置信息在 HttpServerConfig#HttpServerChannelInitializer:

@Override
protected ChannelPipelineConfigurer defaultOnChannelInit() {return super.defaultOnChannelInit().then(new HttpServerChannelInitializer(this));}

对于 HTTP 协议这里有自己的 initializer 也就是 pipeline:

configureHttp11Pipeline(channel.pipeline(),accessLogEnabled,accessLog,compressPredicate(compressPredicate, minCompressionSize),cookieDecoder,cookieEncoder,decoder,formDecoderProvider,forwardedHeaderHandler,idleTimeout,observer,mapHandle,maxKeepAliveRequests,metricsRecorder,minCompressionSize,uriTagValue);

熟悉 Netty 框架的同学对这一块并不默认, 一个最乞丐版的 Netty 服务器可能只包含 request/respone decoder/encoder。

#预热

默认情况下,HttpServer初始化资源的操作在需要使用的时候才进行。这意味着初始化加载的时候bind operation会占用额外的时间:

  1. 事件循环组
  2. native传输库(当使用了native传输的时候)
  3. 用于安全性的native库(使用了OpenSsl的时候)

当您需要预加载这些资源的时候,您可以按照以下方式来配置HttpServer:

public static void main(String[] args) {HttpServer httpServer =HttpServer.create().handle((request, response) -> request.receive().then());httpServer.warmup() // <1>.block();DisposableServer server = httpServer.bindNow();server.onDispose().block();
}

<1> 初始化和加载事件循环组,native传输库和用于安全性的native库

这篇关于Reactor Netty HTTP 服务器端-响应式编程-014的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/975993

相关文章

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据

Python WSGI HTTP服务器Gunicorn使用详解

《PythonWSGIHTTP服务器Gunicorn使用详解》Gunicorn是Python的WSGI服务器,用于部署Flask/Django应用,性能高且稳定,支持多Worker类型与配置,可处... 目录一、什么是 Gunicorn?二、为什么需要Gunicorn?三、安装Gunicorn四、基本使用启

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应

C# async await 异步编程实现机制详解

《C#asyncawait异步编程实现机制详解》async/await是C#5.0引入的语法糖,它基于**状态机(StateMachine)**模式实现,将异步方法转换为编译器生成的状态机类,本... 目录一、async/await 异步编程实现机制1.1 核心概念1.2 编译器转换过程1.3 关键组件解析

Django HTTPResponse响应体中返回openpyxl生成的文件过程

《DjangoHTTPResponse响应体中返回openpyxl生成的文件过程》Django返回文件流时需通过Content-Disposition头指定编码后的文件名,使用openpyxl的sa... 目录Django返回文件流时使用指定文件名Django HTTPResponse响应体中返回openp