Vert.x Core官方文档中文翻译
我哭,翻译完开头才发现这类资源已经有了。
该翻译资源可在线访问:https://www.bookstack.cn/read/vertx-translation-chinese/core-Core.md。
Vert Core 操作手册
Vert.x的核心是一组Java API库,叫做Vert.x Core
Vert.x提供了些如下功能:
- 开发基于TCP的客户端和服务系统
- 构建支持WebSockets的HTTP客户端及服务系统
- ...
Core库中的功能主要集中在基础层。在Core库中你无法实现数据库访问、授权或者其他高级Web功能。这些高级功能则可以通过Vert.x ext的扩展组件来实现。
微小而轻盈的Vert.x Core库一旦完全整合到现有的应用程序中,则具备显著的优势。您可以在需要的地方灵活运用该技术,并无需对现有代码进行大规模修改或调整即可轻松获取并开始使用。
你无需拘泥于仅使用Vert.x的核心库,因为系统提供了多种支持的语言选择。这一点相当吸引人,并非强制采用特定语言以直接调用Java API。各语言有不同的规范和习惯,例如将Java编程习惯强加给Ruby开发人员就显得不太合适。因此我们开发了多语言版本的Core库以适应不同开发者的编程偏好,在提升效率的同时也能更好地满足开发需求。这些多语言版本的Core库在功能上与Java APIs版的完全一致。
从现在开始,我们用core这个词来指代Vert.x core。
注
Maven(在你的pom.xml文件中)
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-core</artifactId>
<version>4.0.2</version>
</dependency>
AI写代码
Gradle(在你的build.gradle文件中)
dependencies {
compile 'io.vertx:vertx-core:4.0.2'
}
AI写代码
让我们来讨论一下core中不同的概念和特性。
Vert.x的开始
在 vert.x 中你受限于其功能除非你具备与 vert.x 的 object 互动的能力。
vert.x 的 object 是该框架的核心管理单元 也是实现所有功能的方法论。
包括负责实现客户端和服务端功能 提供事件总线引用接口 配置定时任务以及其他相关操作。
如何获取该对象(即 vert.x 的 object)?
如果将 Vert.x 内嵌到程序中 则需按照以下步骤进行操作:
- 确保内嵌环境配置正确
- 调用相应的初始化函数
- 设置必要的属性参数
- 完成内嵌流程
- 运行代码以启动框架服务
Vertx vertx = Vertx.vertx();
AI写代码
请【注意
创建Vert.x的实例时指定参数选项
为了创建vert.x的对象实例,在预设配置不满足个人需求时,请您根据需要调整相关参数设置以重新配置vert.x的对象实例
Vertx vertx = Vertx.vertx(new VertxOptions().setWorkerPoolSize(40));
AI写代码
这个VertxOptions对象提供了多种功能模块支持你的系统配置。具体来说包括集群管理、高可用性优化、线程池规模调节以及众多其他功能选项。
创建一个集群Vert.x实例
在创建Vert.x集群时(参考事件总线event bus章节以获取更多细节),通常建议采用异步机制来生成Vertx对象。这一过程耗时约数秒(或几秒),以便将集群中的不同vertx实例整合到同一个逻辑中。为了避免占用主线程资源,在此期间我们通过非阻塞的方式返回结果给您。
链式调用
或许在之前的示例里, 你已经看到了代码应用了 fluent API. fluent API 是一种广泛应用于现代前端开发的技术框架, 其核心在于将一系列方法串联起来进行操作.
其基本定义是: fluent API 是指那些多个方法依次连接并被调用的地方. 在实际开发中, fluent 模式的典型特征是通过 fluent 接口将不同功能模块无缝对接, 从而实现高效的业务流程管理.
request.response().putHeader("Content-Type", "text/plain").end("some text");
AI写代码
这是在Vert.x APIs中一种常见的模式,所以要习惯它。
链式调用支持您在代码中简短一点地实现功能。当然不建议您使用这种方法。你可以选择跳过链式调用模式,并根据自己的习惯采用其他方式来完成任务。例如:
HttpServerResponse response = request.response();
response.putHeader("Content-Type", "text/plain");
response.write("some text");
response.end();
AI写代码
不要询问我们,我们会通知你
Vert.x APIs是以事件驱动为基础设计的。这表示每当Vert.x中出现某个特定事件时,系统会自动触发相应的响应机制。
事件示例:
- 定时器被触发了
- socket接收到了一些数据
- 从硬盘获取到了一些数据
- 出现异常情况
- http服务收到了请求
通过向Vert.x注册handlers来响应所有即将发生的网络请求。例如,在每秒钟的时间间隔内, 定时器会向Vert.x发送新的请求数据.
vertx.setPeriodic(1000, id -> {
// 这个handler每一秒都会被调用
System.out.println("timer fired!");
});
AI写代码
或者接收到http的请求:
server.requestHandler(request -> {
// 这个handler会在服务每次接收到http请求时被调用
request.response().end("hello world!");
});
AI写代码
当使用vert.x将事件传递至你的handler时,在异步模式下执行调用操作,则可能导致操作完成时间有所延后
而这就引出在我们Vertx中非常重要的概念。
不要阻塞我
通常情况下(除了某些特定的文件系统操作以Sync结尾),Vert.x中的所有API不会阻塞调用线程。
除了能够立即返回结果并返回的情况外,在多数情况下你需要通过一个handler函数来延迟事件处理
由于采用了无阻塞线程机制支持的Vert.x API技术,在实际应用中你就可以利用较少数量级的线程资源实现高效地管理多个并发请求。
在以下情况下,使用传统的阻塞API,调用线程可能会被阻塞:
- 通过socket进行数据的接收
- 将数据存储到硬盘上
- 传输信息并等待反馈
- …更多其他操作场景
在上述阻塞案例中,在你的进程仅能等待而无其他可执行操作的情况下,则显得非常低效。
这预示着,在您的情况下,若想要通过阻塞API实现大规模并发处理,则必须部署充足数量的线程以避免系统僵死。
线程在它们所需的内存(例如堆栈)和上下文切换方面有性能开销。
在当今多数应用所要求的高并发水平上,阻塞机制难以实现大规模并行扩展。
Reactor 和多Reactor
我们曾经介绍过Vert.x APIs基于事件驱动设计,并且Vert.x会将事件分配给能够处理这些事件的handler。
通常情况下,Vert.x会发送通知给你的handler函数所使用的线程被称作event loop。
