Eclipse Vert.x 是一個事件驅動的應用程序框架,其支持多種編程語言,並運行於Java虛擬機中。[3][4]

Vert.x
原作者Tim Fox
開發者Tim Fox, VMWare, Red Hat, Eclipse基金會
當前版本
  • 4.5.8 (2024年5月24日;穩定版本)[1]
編輯維基數據鏈接
源代碼庫 編輯維基數據鏈接
編程語言Java, JavaScript, Apache Groovy, Ruby, Scala, Kotlin, Ceylon, Python, Clojure
操作系統Cross-platform
平台Java虛擬機
類型事件驅動 網絡
許可協議Apache License version 2.0
網站vertx.io

在其他編程語言中,與其類似的有Node.js(適用於JavaScript)、Twisted(適用於Python)、Perl Object Environment(適用於Perl)、libevent(適用於C)、reactPHP(適用於PHP)、amphp(適用於PHP)及EventMachine(適用於Ruby)。

自2.1.4版本始,Vert.x以JavaJavaScriptGroovyRubyPythonScalaClojureCeylon編程語言公開其API。

自3.6.0版本始,Vert.x以JavaJavaScriptGroovyRubyScalaKotlinCeylon編程語言公開其API。

歷史 編輯

2011年,在VMware工作的 Tim Fox 開始開發Vert.x。

Tim Fox 最初將項目命名為「Node.x」,該名稱由Node.js的命名衍生而來,其中「x」表示新項目支持多種編程語言,而非僅支持JavaScript。該項目後來改名為「Vert.x」以避免潛在的法律問題,因為「Node」是 Joyent Inc. 擁有的商標[5]。新名稱替換了node一詞,所使用的vertex一詞在數學中同樣意為節點。

2012年12月,VMware向已離職的 Tim Fox 發送法律文件,以期從Vert.x社區[6][7]獲得Vert.x商標、域名、博客、GitHub帳戶及Google Group的控制權。

與其他各方討論後,2013年1月,VMware同意將項目和相關IP轉移到Eclipse基金會這一中立的法律實體中,以使Vert.x社區獲得最大收益。 [8]

2013年8月,Core Vert.x 項目完成了向Eclipse基金會的遷移。Vert.x技術棧中的其他項目並未遷移至Eclipse,但因Eclipse基金會的默認而繼續使用「Vert.x」商標。

2014年5月,Vert.x在JAX創新獎中榮獲「最具創新性的Java技術」獎。 [9]

2016年1月12日,Tim Fox辭去了Vert.x項目的領導職務。[10]長期貢獻者Julien Viet取代了他的位置。

架構 編輯

Vert.x使用底層I/O庫Netty[11]

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服務器以高度可擴展的方式提供內容。

參考 編輯

外部連結 編輯