Vert.x
原作者 | Tim Fox |
---|---|
開發者 | Tim Fox, VMWare, Red Hat, Eclipse基金會 |
當前版本 | 3.8.5(2020年1月27日[1]) |
原始碼庫 | |
程式語言 | Java, JavaScript, Apache Groovy, Ruby, Scala, Kotlin, Ceylon, Python, Clojure |
作業系統 | Cross-platform |
平台 | Java虛擬機 |
類型 | 事件驅動 網絡 |
許可協議 | Apache License version 2.0 |
網站 | vertx |
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以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. 擁有的商標[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擁有以下特性:
- 支持多種程式語言。應用程式組件能夠以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伺服器以高度可擴展的方式提供內容。