Vert.x, 简介

news/2024/9/18 20:48:45 标签: java, vert.x

Vert.x是什么

Vert.x是Eclipse基金会下的一个开源项目,基于Eclipse Public License(EPL)2.0和Apache License 2.0双重许可,是一个基于JVM的用于构建响应式(reactive)应用程序的工具包。

Vert.x基于Netty,但不仅仅局限于开发可扩展的高性能网络服务器和客户端。通过可扩展模块(module),Vert.x构建了庞大的响应式模块生态系统(类似于Spring开箱即用全家桶),具有编写现代服务所需的一切:全面的Web技术栈,响应式数据库驱动程序、消息队列、事件流、集群支持、指标监控、分布式跟踪等等。

Vert.x是轻量级的工具包,而不是框架。Vert.x对应用程序架构没有强制要求,因此很容易组合和嵌入现有应用程序。可以在其它框架(如springboot)中轻松整合Vert.x。

Vert.x中文社区(https://vertx-china.github.io/)对于像我一样英文不好的初学者是一个不错的入门网站,可以看作是中文版的官网。类似于Spring Initializr,Vert.x也有在线的项目生成工具(https://start.vertx.io/)。如前面介绍的,Vert.x是轻量级的工具,对应用程序架构没有强制要求,我们可以通过添加依赖的方式在已有的项目中使用Vert.x。其中Vert.x Core模块(vertx-core)是Vert.x的核心Java API,必须添加。而其它的模块称为Vert.x ext(扩展包),不是必须的,可根据需要添加。Vert.x各模块的介绍在"文档"中(https://vertx-china.github.io/docs/)。

Vert.x版应答服务

我们使用Vert.x实现应答服务器,因为vertx-core已经包含TCP Server功能,所以我们只需要在maven项目中添加Vert.x Core依赖即可。

<dependency>
	<groupId>io.vertx</groupId>
	<artifactId>vertx-core</artifactId>
	<version>4.5.10</version>
</dependency>

以下是实现代码:

java">import io.vertx.core.Vertx;
import io.vertx.core.net.NetServer;
import io.vertx.core.net.NetServerOptions;

public class VertxEchoServer {
	public static void main(String[] args) {
		Vertx vertx = Vertx.vertx();
		NetServerOptions option = new NetServerOptions().setHost("0.0.0.0").setPort(3000);
		NetServer server = vertx.createNetServer(option);
		server.connectHandler(socket -> { // A connect handler for this server.
			socket.handler(buffer -> { // As data is read, the handler will be called with the data.
				// System.out.println(socket.remoteAddress() + " -> (" + buffer.length() + " bytes): "+ buffer.toString() );
				socket.write(buffer);
			});
		})
		.listen()
		.onFailure(ex -> ex.printStackTrace());
	}
}

Vert.x提供一个事件驱动编程模型,Vert.x中的几乎所有API(方法)都是异步的,都不会阻塞调用线程。可以立即提供结果的API会立即返回,否则您需要提供一个处理器(Handler)来接收稍后回调的事件。

在Vert.x版应答服务中我们只需编写两个处理器: 连接处理器(Handler<NetSocket>),在其回调方法(handle)中为建立的客户端NetSocket添加客户端读取处理器;客户端读处理器(Handler<Buffer>),在其回调方法(handle)中将接收到的客户端数据回写。如果我们不使用Lambda表达式,而是传统得写法,可以看得更清晰。

java">NetServer server = vertx.createNetServer(option);
Handler<NetSocket> connectHander = new Handler<NetSocket>() {
	@Override
	public void handle(NetSocket socket) {
		Handler<Buffer> readHandler = new Handler<>() {
			@Override
			public void handle(Buffer buffer) {
				socket.write(buffer);
			}
		};
		socket.handler(readHandler);
	}
};
server.connectHandler(connectHander);
Future<NetServer> future = server.listen();
Handler<Throwable> failureHandler = new Handler<>() {
	@Override
	public void handle(Throwable ex) {
		ex.printStackTrace();
	}
};
future.onFailure(failureHandler);

相对于之前得NIO版本应答服务器,使用Vert.x让异步编程变得简单许多,Vert.x 的API大部分都是事件驱动的,我们只需要为我们感兴趣的事件编写响应代码,当感兴趣的事情发生时,Vert.x调用您提供的处理器(Handler)来处理事件。

Vert.x中的大部分都是异步(非阻塞)的,异步的方法大都会返回一个Future对象,来处理异步结果。如上例的server.listen()方法,我们为Future添加了一个失败处理器(Handler<Throwable>),当NetServer监听失败时候印打印异常堆栈信息。


http://www.niftyadmin.cn/n/5664497.html

相关文章

openCV的python频率域滤波

在OpenCV中实现频率域滤波通常涉及到傅里叶变换(Fourier Transform)和其逆变换(Inverse Fourier Transform)。傅里叶变换是一种将图像从空间域转换到频率域的数学工具,这使得我们可以更容易地在图像的频域内进行操作,如高通滤波、低通滤波等。 下面,我将提供一个使用Py…

RTX 4090 系列即将停产,RTX 5090 系列蓄势待发

据最新消息&#xff0c;英伟达将于今年10月正式终结其GeForce RTX 4090及RTX 4090D两款旗舰级显卡的生产线。根据行业媒体报道&#xff0c;英伟达及其合作厂商将从下个月开始全面停止这两款显卡的制造。 自2022年10月问世以来&#xff0c;GeForce RTX 4090凭借其无与伦比的GPU…

国产分布式数据库-tidb单机部署文档

tidb单机部署文档 1、创建用户 #创建用户 useradd tidb #设置密码 passwd tidb2、配置免密码登录 编辑/etc/sudoers文件,文末加入&#xff1a; tidb ALL(ALL) NOPASSWD:ALL如果想要控制某个用户(或某个组用户)只能执行root权限中的一部分命令, 或者允许某些用户使用sudo时…

微服务容错及解决

学前必备知识 学之前我们要理解一些概念&#xff0c;之后我们会遇到QPS&#xff0c;并发量&#xff0c;线程等专有名词。 一文搞懂高并发性能指标&#xff1a;QPS、TPS、RT、并发数、吞吐量 - 知乎 (zhihu.com) 雪崩问题 1 是什么 在微服务远程调用的过程中&#xff0c;还…

python队列操作

1. 队列初始化 创建空的队列&#xff1a; test_list [] 使用初始值&#xff1a; test_list [1, 2, 3, 4, 5] test_list3 ["a", "b", "c", "d"] 使用列表生成式创建一个带有初始元素的列表&#xff1a; >>> test_lis…

力扣150题——位运算

位运算概述 位运算&#xff08;Bitwise Operation&#xff09;是计算机底层操作中的一种&#xff0c;用来直接对整数的二进制位进行操作。位运算通常速度很快&#xff0c;且消耗的内存较少&#xff0c;在处理一些特定问题&#xff08;如加密算法、图像处理、低级硬件编程等&…

Threejs之看房案例(下)

本文目录 前言最终效果1、点精灵1.1 添加点精灵1.2 点精灵效果2、添加事件2.1 鼠标移动事件2.1.1 效果2.2 鼠标点击事件2.2.1 效果2.3 切换互通3. 完整代码前言 在Threejs之看房案例(上)这篇博客中我们已经完成了大厅的3d观看效果,但是我们会发现如果想去其他房间观看,没有…

好用的超声波清洗机有哪些?精选四大爆款品牌汇总

随着时代的发展及生活水平的提升&#xff0c;珠宝饰品、眼镜等个人物品日益普及至千家万户。然而&#xff0c;这些贵重小物在日常存放中难免会积累微尘与隐形细菌&#xff0c;无形中可能对我们的健康产生潜在影响。鉴于细菌的微小难察&#xff0c;超声波清洗机应运而生&#xf…