写点什么

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

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

关注

评论

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

可以手动磨皮的p图软件portraiture2023

茶色酒

Portraiture2023

技术管理者如何发掘写代码之外的能力?

石云升

极客时间 1月月更 技术领导力实战笔记

【必看知识】PCB设计中焊盘的设计标准

华秋PCB

工具 PCB PCB设计

Mac免费实用的读写软件Tuxera NTFS2023

茶色酒

Tuxera NTFS2023\ Tuxera NTFS2023

java课程学习难度怎么样

小谷哥

云图说 | 华为云主机安全服务(新版)来啦!

华为云开发者联盟

云计算 后端 华为云 云图说 企业号 1 月 PK 榜

计算机网络到底应该怎么学?

Java永远的神

程序员 面试 计算机网络 计算机 tcpip

《鹅鸭杀》爆火,一文带你了解如何实现顶流社交游戏

声网

游戏开发 RTC 应用架构

工赋开发者社区 | 工业5.0为何是下一个10年的制造业关键性变革方向?

工赋开发者社区

NLP知识图谱项目合集(信息抽取、文本分类、图神经网络、性能优化等)

汀丶人工智能

人工智能 自然语言处理 深度学习 知识图谱

性能提升 40 倍!我们用 Rust 重写了自己的项目

Peefy

rust 编程语言 #go Python.

接口测试这件小事

石臻臻的杂货铺

接口测试

不看后悔,一文带你入门Go云原生微服务

王中阳Go

golang 高效工作 学习方法 微服务 云原生

如何通过C#/VB.NET在 Excel 中对形状进行分组或取消分组

在下毛毛雨

C# .net Excel

API 网关策略二三事

API7.ai 技术团队

APISIX 网关设计

SimMIM:更简单的掩码图像建模

Zilliz

汽车虚拟仿真,实时云渲染至关重要!

3DCAT实时渲染

云渲染 虚拟仿真 实时渲染 汽车仿真

【网络安全】记一次红队渗透实战项目

网络安全学海

网络安全 信息安全 计算机 渗透测试 漏洞挖掘

软件测试/测试开发 | Appium 用例录制

测试人

软件测试 自动化测试 测试开发 测试用例 appium

元宇宙成本高吗?构建元宇宙需要多少钱?

3DCAT实时渲染

元宇宙 元宇宙开发 元宇宙成本

工赋开发者社区 | 事件驱动架构要避开的 5 个陷阱

工赋开发者社区

软件测试/测试开发 | Appium环境安装与架构介绍

测试人

软件测试 自动化测试 测试开发 appium

架构实战营4.5 常见存储系统随堂练习

西山薄凉

「架构实战营」

云原生数据交付平台Kuda在AI场景下的模型分发实践

Geek_c4ea78

机器学习 开源 Kubernetes 容器 云原生

在spring boot3中使用native image

程序那些事

spring 程序那些事 spring boot3

Gartner:流程挖掘市场发展空间巨大,2022年预计市场规模将超10亿美元

九科Ninetech

镭速-跨国车企数据高速、安全跨境传输解决方案

镭速

云上的米开朗基罗:在不确定时代,寻找建筑般的确定性

华为云开发者联盟

云计算 后端 华为云 企业号 1 月 PK 榜

直播预告 | 2月2日,腾讯Light与你一同用AI,让美好变更好

腾源会

公益

佛萨奇2.0上链DApp开发|佛萨奇链上开发技术

薇電13242772558

dapp

Tokio 中 hang 死所有 worker 的方法

Databend

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