前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vert.x-Core-0.写在前面

Vert.x-Core-0.写在前面

作者头像
悠扬前奏
发布2019-05-28 12:50:36
8210
发布2019-05-28 12:50:36
举报
文章被收录于专栏:悠扬前奏的博客

Vert.x的核心是一组被称为“Vert.x Core”的Java API。

Vert.x提供了以下功能:

  • 编写TCP客户端和服务器
  • 编写支持WebSockets的客户端和服务器
  • 事件总线
  • 共享数据-局部map和集群中的分布式map
  • 定时和延迟的任务
  • 部署和卸载Verticle
  • 数据报套接字
  • DNS客户端
  • 文件系统的访问
  • 高可用
  • 本地传输
  • 集群

核心中的功能都很底层,类似数据库访问,权限控制或者高级web功能在Vert.x ext(扩展)中提供。

Vert.x核心包很小很轻量,可以只使用所需要的部分,就完全集成到现有的项目中——并不强制要求应用满足指定的结构才能使用Vert.x

可以在任何Vert.x核心支持的语言立使用它。它自动为每种语言生成和Java API惯用的等价物。

后文中。core都指的是Vert.x core。

如果是使用Maven或者Gradle的项目,添加以下依赖即可使用Vert.x Core API:

  • Maven(在pom.xml中添加):
代码语言:javascript
复制
<dependency>
  <groupId>io.vertx</groupId>
  <artifactId>vertx-core</artifactId>
  <version>${vert.x.version}</version>
</dependency>
  • Gradle(在build.gradle文件中添加)
代码语言:javascript
复制
dependencies {
  compile 'io.vertx:vertx-core:3.5.3'
}

1. Vertx对象

Vert.x的使用离不开Vertx对象,按如下方式创建一个Vertx实例:

代码语言:javascript
复制
Vertx vertx = Vertx.vertx();

注意:大多数应用只需要一个Vert.x实例,但是如果需要可以创建多个Vertx.x实例,例如需要隔离多个事件总线或者对不同的服务器和客户端分组。

1.1 Vertx对象配置

创建Vertx时能够进行一些配置,例如:

代码语言:javascript
复制
Vertx vertx = Vertx.vertx(new VertxOptions().setWorkerPoolSize(40));

VertxOptions对象有诸多选项以供配置,例如集群(clustering),高可用(high availability),池大小(pool sizes)等等。详见Javadoc。

1.2 创建Vert.x集群

创建Vert.x集群(参阅事件总线一章关于集群的内容)通常需要使用异步变量来创建Vertx对象。 为了把集群中的不同Vert.x实例组织在一起需要一些时间(可能有几秒钟)。为了不阻塞调用线程(the calling Thread),结果会以异步方式返回。

2. 流式API

Vert.x支持流式API。 流式API指的是对多个方法的调用能被链式地写在一起,例如:

代码语言:javascript
复制
request.response().putHeader("Content-Type", "text/plain").write("some text").end();

这在Vert.x中很常见,但是不是强制使用,也可以这么写:

代码语言:javascript
复制
HttpServerResponse response = request.response();
response.putHeader("Content-Type", "text/plain");
response.write("some text");
response.end();

3. 事件驱动

Vert.x 的API大部分是事件驱动(event driven)的。也就是说关注的事情发生后,Vert.x会发送事件(event)。 例如如下事件:

  • 定时器被触发
  • socket收到数据
  • 磁盘数据读取完毕
  • 触发异常
  • HTTP服务器收到请求 通过向Vert.x API提供提供handlers来处理这些事件,例如需要每秒钟收到一个定时器事件:
代码语言:javascript
复制
vertx.setPeriodic(1000, id -> {
  // This handler will get called every second
  System.out.println("timer fired!");
});

收到HTTP请求:

代码语言:javascript
复制
server.requestHandler(request -> {
  // This handler will be called every time an HTTP request is received at the server
  request.response().end("hello world!");
});

事件触发后,Vert.x会异步调用handler。

4. 非阻塞

除了极少数例外(例如以'Sync'结尾的文件系统操作),所有Vert.x中的API都不会阻塞调用线程。 如果一个结果能被立即获得,它就会被立即返回,否则需要提供一个处理器(handler)来在稍后接受事件。 Vert.x API没有线程阻塞意味着少量线程就能处理大量并发。 传统的阻塞API线程阻塞通常发生在:

  • 从socket中读取数据
  • 向硬盘中写入数据
  • 向接受者发送数据,然后等待回应
  • 其他情况 以上案例中,线程在等待结果的时候不能处理任何其他任务。 这样如果需要用阻塞API处理大量并发就需要很多线程来防止应用卡住。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.04.16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Vertx对象
  • 1.1 Vertx对象配置
    • 1.2 创建Vert.x集群
    • 2. 流式API
    • 3. 事件驱动
    • 4. 非阻塞
    相关产品与服务
    事件总线
    腾讯云事件总线(EventBridge)是一款安全,稳定,高效的云上事件连接器,作为流数据和事件的自动收集、处理、分发管道,通过可视化的配置,实现事件源(例如:Kafka,审计,数据库等)和目标对象(例如:CLS,SCF等)的快速连接,当前 EventBridge 已接入 100+ 云上服务,助力分布式事件驱动架构的快速构建。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档