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