写点什么

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:2311932
用户头像

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

关注

评论

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

研发管理的挑战、本原与方案

iSoftBook

项目管理 软件工程 研发管理平台 敏捷方法 研发云平台

大语言模型测试

赤色闪电

“智算聚芯力 津彩新未来”天津市人工智能计算中心200P上线仪式暨天津人工智能应用创新论坛成功举办

彭飞

未来3-5年,前端开发往哪个方向发展更好就业?

互联网工科生

前端 前端开发 低代码

安全可靠的文件传输服务助力完成更高效的医疗保健工作(上)

镭速

文件传输服务 医疗保健

安全可靠的文件传输服务助力完成更高效的医疗保健工作(下)

镭速

文件传输服务 医疗保健

Numpy和Pandas简介

3D建模设计

Python 数据科学

App Tamer for Mac(CPU智能控制管理) v2.8.1激活版

mac

苹果mac Windows软件 App Tamer 优化管理软件

昇腾 AI 创新大赛2023河北区域赛成功举办,22支优秀团队脱颖而出

彭飞

图解Kafka消费者客户端分区分配策略

石臻臻的杂货铺

Kafk

kill -15 与kill -9的区别

源字节1号

开源 软件开发 前端开发 后端开发 小程序开发

电气设计软件有哪些?EPLAN让你成为专业工程师

智造软件

EPLAN 电器辅助设计 电气设计

前端开发纷繁复杂,是否有更高效的开发方式?

高端章鱼哥

前端开发 低代码 低代码前端

夯实金融云基础设施底座,天翼云助力金融行业释放发展新活力

天翼云开发者社区

云计算 安全

NFT平台搭建,如何开发一个NFT平台

V\TG【ch3nguang】

关于前端就业前景的一点看法

树上有只程序猿

前端 前端开发

NFT游戏模式开发,外包技术公司团队搭建

V\TG【ch3nguang】

国产“芯”突破 | 优博讯携手海思推出AI新零售创新方案

Geek_2d6073

OpenHarmony—应用间HSP开发指导

OpenHarmony开发者

OpenHarmony

喜讯!广通优云两大产品入选软博会“年度优秀创新软件产品推广目录”

广通优云

HTTPS的安全体现在什么地方?

巨量HTTP

https HTTP

为什么当下MES如此火热,各大制造业工厂都在推行?

万界星空科技

MES系统

议题征集中| KCD 2023 杭州站,共话云原生技术

OpenAnolis小助手

云原生 杭州 龙蜥社区 议题征集 KCD

大模型时代的 AI 原生云

Baidu AICLOUD

AI 原生云

实现 LangChain 版本的 AutoGPT 项目的图形化界面

赤色闪电

Python 基础知识:语法、数据类型和控制结构

3D建模设计

Python 数据工程

Python数据结构5步入门

3D建模设计

Python 数据工程

一文秒懂!腾讯云ES HTTPS 集群访问通信最佳实践

腾讯云大数据

ES

工业互联网的破局密钥——低代码开发

力软低代码开发平台

大规模流量下的云边端一体化流量调度体系

火山引擎边缘云

边缘计算 数字孪生 边缘云 火山引擎边缘云

电子行业云MES解决方案

万界星空科技

MES系统

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