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库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/9389.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python | Leetcode Python题解之第80题删除有序数组中的重复项II

题目&#xff1a; 题解&#xff1a; class Solution:def removeDuplicates(self, nums: List[int]) -> int:idx, left, right 0, 0, 0while left < len(nums):nums[idx] nums[left]idx 1while right < len(nums) and nums[right] nums[left]:right 1if right - …

clickhouse学习笔记06

ClickHouse的建表和引擎选择思路讲解 ClickHouse的常见注意事项和异常问题排查 ClickHouse高性能查询原因剖析-稀疏索引 ClickHouse高性能写入剖析-LSM-Tree存储结构

docker自建GitLab仓库

摘要 GitLab 是一个功能强大的开源代码托管平台&#xff0c;它不仅提供了代码存储和版本控制的核心功能&#xff0c;还集成了项目管理、CI/CD 流水线、代码审查等企业级特性。本文将指导你如何在自己的服务器上搭建 GitLab 社区版&#xff0c;创建一个完全属于自己的开源仓库&…

绝地求生:你觉得复活系统还需要哪些改进?

大好&#xff0c;我闲游盒&#xff01; 在28.2版本更新改动中&#xff0c;在维寒迪和泰戈中的复活赛已经替换成通过蓝色晶片复活系统去复活&#xff0c;原本的复活赛将被移除&#xff0c;而且在2024年的工作介绍中曾提到&#xff0c;将计划在所有88的地图中引入蓝色晶片复活系统…

rust学习(openssl rsa加解密文件)

rust的openssl中有支持RSA加解密的库。参考地址如下&#xff1a; openssl::rsa - Rust 里面也有简单的示例代码&#xff1a; use openssl::rsa::{Rsa, Padding};let rsa Rsa::generate(2048).unwrap(); let data b"foobar"; let mut buf vec![0; rsa.size() as…

算法学习010-打家劫舍 c++动态规划算法实现 中小学算法思维学习 信奥算法解析

目录 C打家劫舍 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、运行结果 五、考点分析 六、推荐资料 C打家劫舍 一、题目要求 1、编程实现 你是⼀个专业的⼩偷&#xff0c;计划偷窃沿街的商铺 。每间商铺 都藏有⼀定的现⾦&#xff0c;影响你…

谷歌继续将生成式人工智能融入网络安全

谷歌正在将多个威胁情报流与 Gemini 生成人工智能模型相结合&#xff0c;以创建新的云服务。 Google 威胁情报服务旨在帮助安全团队快速准确地整理大量数据&#xff0c;以便更好地保护组织免受网络攻击。 本周在旧金山举行的 RSA 会议上推出的 Google 威胁情报服务吸收了 Mand…

Go 语言基础之常用包【flag、time、strconv、io】

1、命令行参数包 flag flag 包就是一个用来解析命令行参数的工具。 1.1、os.Args import ("fmt""os" )func main() {if len(os.Args) > 0 {for index, arg : range os.Args {fmt.Printf("args[%d]%v\n", index, arg)}} } 运行结果&#…

并行执行线程资源管理方式——《OceanBase 并行执行》系列 3

在某些特定场景下&#xff0c;由于需要等待线程资源&#xff0c;并行查询会遇到排队等待的情况。本篇博客将介绍如何管理并行执行线程资源&#xff0c;以解决这种问题。 《OceanBase并行执行》系列的内容分为七篇博客&#xff0c;本篇是其中的第三篇。前2篇如下&#xff1a; 一…

基于BP神经网络的16QAM解调算法matlab性能仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ........................................................... % 第一部分&#xff1a;加载并…

《青少年成长管理2024》101 “任务计划:成长任务排程”2_2

《青少年成长管理2024》101 “任务计划&#xff1a;成长任务排程”2_2 三、时间预算&#xff08;一&#xff09;期间时间计算&#xff08;二&#xff09;阶段时间计算&#xff08;三&#xff09;成长期总时间预算 四、排程工具(1)《已知成长器》软件(2)其他软件工具 五、日程表…

06.命令的组合使用

命令的组合使用 1.查询当前整个系统每个进程的线程数 我们经常遇到这样的问题&#xff0c;比如某台服务器的CPU 使用率飙升&#xff0c;通过top命令查看是某个程序&#xff08;例如java&#xff09;占用的cpu比较大&#xff0c;现在需要查询java各个进程下的线程数情况。可以通…

jsp 实验12 servlet

一、实验目的 掌握怎样在JSP中使用javabean 二、实验项目内容&#xff08;实验题目&#xff09; 编写代码&#xff0c;掌握servlet的用法。【参考课本 上机实验1 】 三、源代码以及执行结果截图&#xff1a; 源代碼&#xff1a; inputVertex.jsp&#xff1a; <% page lang…

MacOS下载安装JDK8

一、前言 今天给苹果电脑安装JDK环境&#xff0c;后续打算把Mac系统也用起来&#xff0c;也体验一把用苹果系统开发。 JDK就不过多介绍了&#xff0c;大家都是JAVA开发&#xff0c;JDK就是JAVA开发的必要环境。目前已经更新到JDK20了&#xff0c;不过我是不会更新的&#xff0…

关于ARINC653的疑问

1. 如何理解existing process? 在ARINC653的中多次出现existing process&#xff0c;但没有明确的定义。 从existing process的上下文来看&#xff0c;它可能是&#xff1a; - 已经create但尚未start的进程 - 已经start但分区mode尚未是normal的进程 - 分区mode是n…

React Suspense与Concurrent Mode:探索异步渲染的新范式

React的Suspense和Concurrent Mode是两个强大的特性&#xff0c;它们共同改变了React应用处理异步数据加载和UI渲染的方式。下面我将通过一个简化的代码示例来展示如何使用这两个特性。 Concurrent Mode 和 Suspense 的基本用法 首先&#xff0c;确保你使用的是支持这些特性的…

Linux|了解如何使用 awk 内置变量

引言 当我们揭开 Awk 功能部分时&#xff0c;我们将介绍 Awk 中内置变量的概念。您可以在 Awk 中使用两种类型的变量&#xff1a;用户定义的变量和内置变量。 内置变量的值已经在 Awk 中定义&#xff0c;但我们也可以仔细更改这些值&#xff0c;内置变量包括&#xff1a; FILEN…

LeNet-5上手敲代码

LeNet-5 LeNet-5由Yann LeCun在1998年提出&#xff0c;旨在解决手写数字识别问题&#xff0c;被认为是卷积神经网络的开创性工作之一。该网络是第一个被广泛应用于数字图像识别的神经网络之一&#xff0c;也是深度学习领域的里程碑之一。 LeNet-5的整体架构&#xff1a; 总体…

免费思维13招之四:主副型思维

免费思维13招之四:主副型思维 本节,给你分享一下产品型思维的第二种子思维:主副型思维 什么是主副型思维呢?传统的主副型思维是指对企业的核心、利润最高的产品进行收费,一些附加品、延伸产品进行让利,赠送给客户。 但是这早已过时了,现在升级之后的产品型思维,就是将…

C++并发:线程函数传参(二)

正文 传参中的陷阱 1. 向std::thread 构造函数传参&#xff1a;所有参数&#xff08;含第1个参数可调用对象&#xff09;均按值并以副本的形式保存在 std::thread 对象中的tuple里。这一点的实现类似于std::bind。如果要达到按引用传参的效果&#xff0c;可使用std::ref来传递…