跳至內容

Vert.x

維基百科,自由的百科全書
Vert.x
原作者Tim Fox
開發者Tim Fox, VMWare, Red Hat, Eclipse基金會
當前版本3.8.5(2020年1月27日,​4年前​(2020-01-27[1]
原始碼庫 編輯維基數據鏈接
程式語言Java, JavaScript, Apache Groovy, Ruby, Scala, Kotlin, Ceylon, Python, Clojure
作業系統Cross-platform
平台Java虛擬機
類型事件驅動 網絡
許可協議Apache License version 2.0
網站vertx.io

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

在其他程式語言中,與其類似的有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. 擁有的商標[4]。新名稱替換了node一詞,所使用的vertex一詞在數學中同樣意為節點。

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

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

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

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

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

架構

[編輯]

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

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

參考

[編輯]

外部連結

[編輯]