Vert.x

Eclipse Vert.x 是一个事件驱动的应用程序框架，其支持多种编程语言，并运行于Java虚拟机中。Wait, vert.x – JVM Polyglot Alternative to Node.js ，Dio Synodinos，2012-05-04，InfoQVert.x – an asynchronous, event-driven Java web framework ，Eberhard Wolff，2012-06-20，hDeveloper

在其他编程语言中，与其类似的有Node.js（适用于JavaScript）、Twisted（适用于Python）、Perl Object Environment（适用于Perl）、libevent（适用于C）、reactPHP（适用于PHP）、amphp（适用于PHP）及EventMachine（适用于Ruby）。 

自2.1.4版本始，Vert.x以Java、JavaScript、Groovy、Ruby、Python、Scala、Clojure及Ceylon编程语言公开其API。 

自3.6.0版本始，Vert.x以Java、JavaScript、Groovy、Ruby、Scala、Kotlin及Ceylon编程语言公开其API。

 历史 
2011年，在VMware工作的 Tim Fox 开始开发Vert.x。 

Tim Fox 最初将项目命名为“Node.x”，该名称由Node.js的命名衍生而来，其中“x”表示新项目支持多种编程语言，而非仅支持JavaScript。该项目后来改名为“Vert.x”以避免潜在的法律问题，因为“Node”是 Joyent Inc. 拥有的商标 https://groups.google.com/d/msg/vertx/lxZGADtT6dQ/a0qzaQpzfroJ 。新名称替换了node一词，所使用的vertex一词在数学中同样意为节点。 

2012年12月，VMware向已离职的 Tim Fox 发送法律文件，以期从Vert.x社区 "VMware's dealings with Vert.x founder should serve as a warning."   "Who controls Vert.x: Red Hat, VMware, or neither?"  获得Vert.x商标、域名、博客、GitHub帐户及Google Group的控制权。 

与其他各方讨论后，2013年1月，VMware同意将项目和相关IP转移到Eclipse基金会这一中立的法律实体中，以使Vert.x社区获得最大收益。  "Vert.x Joining Eclipse Foundation"   

2013年8月，Core Vert.x 项目完成了向Eclipse基金会的迁移。Vert.x技术栈中的其他项目并未迁移至Eclipse，但因Eclipse基金会的默认而继续使用“Vert.x”商标。 

2014年5月，Vert.x在JAX创新奖中荣获“最具创新性的Java技术”奖。  “Vert.x赢得JAX创新奖”   

2016年1月12日，Tim Fox辞去了Vert.x项目的领导职务。 https://groups.google.com/forum/?fromgroups#!topic/vertx/yluLHXa5CRU  长期贡献者Julien Viet取代了他的位置。 

 架构 
Vert.x使用底层I/O库Netty 。  vert.x – JVM Polyglot Alternative to Node.js ，Dio Synodinos，2012-05-04，InfoQ  

Vert.x拥有以下特性： 

 支持多种编程语言。应用程序组件能够以Java、JavaScript、Groovy、Ruby、Scala、Kotlin和Ceylon编写。 
 简单的并发模型。所有代码都是单线程的，免除了多线程编程的麻烦。 
 简单的异步编程模型，用于编写真正可扩展的非阻塞应用程序。 
 跨越客户端和服务器端的分布式事件总线。事件总线甚至可以渗透到浏览器中的JavaScript中，从而可以创建所谓的实时Web应用程序。 
 角色模型和公共存储库，用于重用并共享组件。 

 示例 
下列Java代码会实现一个输出“Hello from Vert.x”的服务器： import io.vertx.core.AbstractVerticle;

public class Server extends AbstractVerticle {
  public void start() {
    vertx.createHttpServer().requestHandler(req -> {
      req.response()
        .putHeader("content-type", "text/plain")
        .end("Hello from Vert.x!");
    }).listen(8080);
  }
} 同一服务器的JavaScript版本如下： vertx.createHttpServer()
  .requestHandler(function (req) {
    req.response()
      .putHeader("content-type", "text/plain")
      .end("Hello from Vert.x!");
}).listen(8080); 上述两种代码均可使得Web服务器以高度可扩展的方式提供内容。 

 参考 

 外部链接 


Category:Java虚拟机
Category:自由發展元件與函式庫
Category:事件 (计算机)
Category:跨平台軟體
Category:有未审阅翻译的页面