飞天发布时刻:2024年 Forrester 公有云平台Wave™评估报告解读 了解详情
写点什么

vert.x——JVM 上的 Node.js 替代者

  • 2012-05-12
  • 本文字数:1772 字

    阅读完需:约 6 分钟

Vert.x 是一个用于下一代异步、可伸缩、并发应用的框架,旨在为 JVM 提供一个 Node.js 的替代方案。开发者可以通过它使用 JavaScript、Ruby、Groovy、Java、甚至是混合语言来编写应用。

如下代码展示了 Web 服务器是如何通过 vert.x 来处理静态文件的:

复制代码
// JavaScript
load('vertx.js')
vertx.createHttpServer().requestHandler(function(req) {
var file = req.path === '/' ? 'index.html' : req.path;
req.response.sendFile('webroot/' + file);
}).listen(8080)
# Ruby
require "vertx"
Vertx::HttpServer.new.request_handler do |req|
file = req.uri == "/" ? "index.html" : req.uri
req.response.send_file "webroot/#{file}"
end.listen(8080)
// Groovy
vertx.createHttpServer().requestHandler { req ->
def file = req.uri == "/" ? "index.html" : req.uri
req.response.sendFile "webroot/$file"
}.listen(8080)
// Java
import org.vertx.java.core.Handler;
import org.vertx.java.core.http.HttpServerRequest;
import org.vertx.java.deploy.Verticle;
public class Server extends Verticle {
public void start() {
vertx.createHttpServer().requestHandler(new Handler() {
public void handle(HttpServerRequest req) {
String file = req.path.equals("/") ? "index.html" : req.path;
req.response.sendFile("webroot/" + file);
}
}).listen(8080);
}
}

在内部,一个 vert.x 实例会管理着一个小的线程集合,每个线程针对服务器上的一个可用内核。基本上每个线程都实现了一个事件循环。当部署一个 vert.x 应用实例(又叫做 verticle)时,服务器会选择一个事件循环分配给该实例。接下来针对该实例的任务都会通过该线程进行分配。由于在某一时刻可能会有成千上万个 verticle 在运行,因此在同一时刻会将单个事件循环指定给多个 verticle。

Verticle 可与运行在相同或不同 vert.x 实例中的其他 verticle 进行通信,这是通过消息事件总线实现的,它类似于 Erlang 的 actor 模型。消息传递旨在让系统能够在多个可用核心上进行扩展而无需以多线程的方式来执行 verticle 代码。

事件总线是分布式的,并不只会跨越服务器,还会渗透进客户端的 JavaScript 以处理“实时”的 Web 应用。

除了并发与消息传递外,vert.x 还具有如下特性:

  • TCP/SSL 服务器与客户端
  • HTTP/HTTPS 服务器与客户端
  • WebSockets/SockJS 支持

InfoQ 有幸采访到了 VMWare 的高级工程师 Tim Fox 以了解 vert.x:

InfoQ:能否从架构上介绍一下 vert.x 及其构建方式?

Tim:vert.x 的核心是用 Java 编写的,接下来我们为每一种支持的 JVM 语言编写了一个薄薄的 API 层,这样每种语言都有一个适合于该语言的 API 了。我们并没有向这些语言直接公开 Java API。这意味着 Ruby 用户会通过 Ruby 的方式编写代码,JS 用户会通过 JS 的方式编写代码。

InfoQ:能否描述一下在 vert.x 上典型的开发流程么,特别是与开发者使用 Node.js 的体验进行一下对比?

我觉得这与 node.js 是非常类似的。实际的工作流程取决于你是在本地还是云中运行应用。但这并非 vert.x 所特有的。

InfoQ:就调试、监控与运维来看,在 JVM 与 Node.js 上运行实时应用有何差别?

我想说监控与运维实际上与部署 vert.x 的环境之间的关系更为密切而非 vert.x 本身。比如说,如果将 vert.x 部署到云中,那么云提供商可能就会为你提供监控。顺便说一下,社区成员目前已经在 OpenShift 与 Heroku 上运行了 Vert.x。我们希望不久之后 CloudFoundry 支持就会到来。

InfoQ:vert.x 与 Node.js 有什么基准比较么?

我们尚未发布任何的官方基准。但我自己已经完成了一些,在我所做的测试中,vert.x 的性能与可伸缩性都远远超越了 node.js。我希望在不久之后能够发布一些基准。

InfoQ:vert.x 与 Netty 相比如何呢?

Netty 是个很棒的底层 IO 库。Vert.x 实际上使用了 Netty。但 vert.x 是个用于编写异步应用的完整平台。Vert.x 还提供了一个组件模型、文件 IO 及各种 Netty 所没有的东西。我要说的是,在 JVM 世界中,Vert.x 是更类似于 Akka(也使用了 Netty)之类的完整框架。

Vert.x 基于 Apache License v2.0,由VMware 资助,其贡献由 SpringSource Individual Contributor License Agreement 所管理。

查看英文原文: vert.x – JVM Polyglot Alternative to Node.js

2012-05-12 22:2311985
用户头像

发布了 88 篇内容, 共 265.9 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

测试开发 | 人工智能在大规模数据分析中的崭新征程

测吧(北京)科技有限公司

测试

鞍钢集团共和国钢铁工业长子的财务转型之路

用友BIP

财务数智化

WAVE SUMMIT+ 2023:AI开发者之夜,共赴科技最前沿的酷炫派对!

飞桨PaddlePaddle

人工智能 深度学习 开发者 WAVE SUMMIT

3D换肤在服装行业的应用

3D建模设计

WebGL 3D渲染 three.js 材质编辑 材质纹理贴图

测试开发 | 人工智能特征工程:优化模型性能的艺术

测吧(北京)科技有限公司

测试

倒计时1天!WAVE SUMMIT+ 2023将开启,五大亮点抢鲜看!

飞桨PaddlePaddle

人工智能 深度学习 开发者 WAVE SUMMIT

获得JD商品评论 API 如何实现实时数据获取

Noah

华为、海信、TCL、CEC等龙头企业齐聚“2024深圳电子展会”

AIOTE智博会

电子展 深圳电子展 电子信息展 电博会

数栈UI5.0设计实战|B端表单这样设计,不仅美观还提效

袋鼠云数栈

数据中台 设计 表单 表单设计

Java、Groovy项目升级JDK 21 ASM9报错

FunTester

淘宝评价指南:字数限制、评价类型与SEO优化

tbapi

淘宝API接口 天猫API接口 淘宝商品评论接口 淘宝商品评论 天猫商品评论

以数据指标穿透企业经营,优化业务流程,加速企业运转

用友BIP

人才管理

测试开发 | 人工智能数据可视化:揭示数据之美、洞察智慧之源

测吧(北京)科技有限公司

测试

测试开发 | 优化智能决策的前提——人工智能数据清洗与预处理

测吧(北京)科技有限公司

测试

数据库内核那些事|PolarDB HTAP Serverless:打造经济易用的实时分析系统

阿里云瑶池数据库

数据库 阿里云 Serverless 云原生

抢占式批任务分配设计

堡垒机的类型分类

尚思卓越

运维 堡垒机

得物大模型平台,业务效果提升实践

得物技术

算法 技术保障

BRC-20铭文代币合约质押挖矿系统开发

l8l259l3365

如何使用凹凸贴图和位移贴图制作逼真的模型

3D建模设计

WebGL 3D渲染 three.js 材质编辑 材质纹理贴图

Windows 平台下如何安装与配置 MySQL 5.7.36

小魏写代码

测试开发 | 人工智能与分布式计算:驱动智能时代的强力结合

测吧(北京)科技有限公司

测试

软件测试/测试开发丨应该如何设计测试方案

测试人

软件测试 测试开发

低代码平台:多引擎、多应用,灵活构建企业数字化生态

天津汇柏科技有限公司

低代码

软件测试/测试开发丨Pytest测试框架-跳过用例或预期用例失败

测试人

软件测试 测试开发

GLB模型的热门行业用例

3D建模设计

WebGL 3D渲染 three.js 材质编辑 材质纹理贴图

IntelliJ IDEA 数据访问工具配置 Caché/M 数据库系统

HoneyMoose

万字带你熟悉静态分析工具的评估测试

华为云开发者联盟

后端 软件开发 华为云 华为云开发者联盟

vert.x——JVM上的Node.js替代者_JVM_Dio Synodinos_InfoQ精选文章