發(fā)布于:2021-02-11 00:00:18
0
175
0
Oracle最近宣布了JavaScript平臺Avatar的新版本?,F(xiàn)在是時候深入研究等待我們的變化了。
三年來,Oracle在舊金山舉行的年度開發(fā)者大會上發(fā)布了與JavaScript平臺Avatar相關的新聞。今年也不例外。
Avatar最初是從純HTML5 / JavaScript框架開始的。從那時起,它在服務器端通過針對JVM的Node.js實現(xiàn)(稱為Avatar.js)和Java EE特定擴展進行了豐富。開源項目“ Project Avatar”從未超過早期訪問階段(即1.0版)。
在過去的六個月中,公共存儲庫中未出現(xiàn)任何代碼提交-僅添加或更改了測試和注釋。但是在最近的 JavaOne上,Oracle GlassFish團隊的首席產(chǎn)品經(jīng)理兼負責化身活動的John Clingan宣布了一些Avatar新聞。
在過去的幾年中,關于Avatar.js(用于JVM的Node.js運行時環(huán)境)和Project Avatar(用于Java EE功能的增強)的命名存在很多困惑–現(xiàn)在Oracle僅講“ Avatar 2.0”。
應用服務器:passé
當然,最大的變化是 不再需要Java EE應用服務器來運行Avatar。到目前為止,GlassFish 4和Oracle WebLogic版本12.1.3均受支持(甚至是必需的)。Avatar 2.0現(xiàn)在在單獨的JVM中以單獨的進程運行,并且可以從命令行輕松啟動。
結果,用戶可以利用已經(jīng)內(nèi)置的HTTP模塊(例如與Node.js一起使用),而不再受使用HTTP堆棧的限制。此功能使Avatar 2.0可以使用使用HTTP模塊的更多標準Node應用程序。目前正在考慮WebLogic Server中的管理集成,并且預計很快將發(fā)布此版本。
并行事件循環(huán)
與標準節(jié)點環(huán)境相比,Avatar 2.0的一大優(yōu)勢是并行事件循環(huán)可以在其自己的線程中運行,但是它們在操作系統(tǒng)級別僅需要一個JVM進程。這意味著只必須監(jiān)視和管理一個過程。
所有事件循環(huán)都通過內(nèi)置的HTTP負載平衡器共享一個端口。使用16核處理器,可以通過一個操作端口在單個進程中管理16個事件循環(huán)(每個內(nèi)核一個線程中的每個循環(huán))。使用Node.js操作這種基礎架構要復雜得多且麻煩。
各個事件循環(huán)可以通過內(nèi)部事件,消息總線或共享狀態(tài)相互通信。這意味著在運行時可以在狀態(tài)和各種線程之間交換數(shù)據(jù)??梢韵蛞韵轮黝}注冊特定主題的事件總線偵聽器:
// listen for messages on topic 'hello' bus.on('hello', function(body, msg) { print(name + ' got message: ' + JSON.stringify(body)); });
您可以使用以下方式發(fā)送消息(來自其他并行線程):
// publishing to 'hello' topic: bus.publish('hello', { x : 'x', y : 'y' });
通過事件總線發(fā)送的數(shù)據(jù)不是持久性的,并且如果在發(fā)送消息時收件人不可用,則消息將消失。如果您希望將消息存儲一段時間,以便以后可以訪問它們(例如,恢復某個狀態(tài)),則可以使用通過地圖API實現(xiàn)的共享狀態(tài)。
var state = avatar.application.state; state.put('key', {'value': 'myValue'}); var object = state.get('key');
即使在這里,Oracle也將一致性作為一種緩存實現(xiàn),這樣,不僅可以跨JVM中的多個線程,而且還可以跨多個節(jié)點和JVM進行分布式通信。由于一致性還實現(xiàn)了JCache JSR-107,因此甚至可以想象,其他基于Avatar 2.0的應用程序也可以參與此共享狀態(tài)通信。