欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

Web發(fā)展簡史((webapp+Java原生)移動(dòng)端開發(fā) )+web網(wǎng)站) - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開發(fā)/軟件開發(fā)

知識(shí)

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營銷的便利,運(yùn)營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!

您當(dāng)前位置>首頁 » 新聞資訊 » 網(wǎng)站建設(shè) >

Web發(fā)展簡史((webapp+Java原生)移動(dòng)端開發(fā) )+web網(wǎng)站)

發(fā)表時(shí)間:2019-4-1

發(fā)布人:葵宇科技

瀏覽次數(shù):35

Web發(fā)展簡史--------->((webapp+Java原生)移動(dòng)端開發(fā)(微信小程序,公眾號(hào),頭條app))+web網(wǎng)站)

Web發(fā)展簡史

1:在那時(shí),Web開發(fā)還比較簡單,開發(fā)者經(jīng)常會(huì)去操作web服務(wù)器(主要還是他自己的機(jī)器),并且他會(huì)寫一些HTML頁面放到服務(wù)器指定的文件夾(/www)下。這些HTML頁面,就在瀏覽器請(qǐng)求頁面時(shí)使用。(當(dāng)時(shí)只能獲取HTML,靜態(tài)頁面)

2:問題就出現(xiàn)了,你只能獲取到靜態(tài)內(nèi)容。倘若你想讓訪問者看到有多少其他訪問者訪問了這個(gè)網(wǎng)站呢(還記得那些統(tǒng)計(jì)流量的旋轉(zhuǎn)圖片嗎?!),或者倘若你想讓訪問者去填寫這樣一個(gè)表單,包含有姓名和郵件地址呢?于此就轉(zhuǎn)向了CGI和Perl腳本,在web服務(wù)器端運(yùn)行一段短小的代碼,并能與文件系統(tǒng)或者數(shù)據(jù)庫進(jìn)行交互(可以交互啦!提交個(gè)表單,查看個(gè)信息)

3:當(dāng)時(shí)組織CGI/Perl這樣的腳本代碼太混亂了。CGI伸縮性不是太好(經(jīng)常是為每個(gè)請(qǐng)求分配一個(gè)新的進(jìn)程),也不太安全(直接使用文件系統(tǒng)或者環(huán)境變量),同時(shí)也沒提供一種結(jié)構(gòu)化的方式去構(gòu)造動(dòng)態(tài)應(yīng)用程序。幾年來一直很困惑,直到大約2005年左右,出現(xiàn)了Java Server Pages(JSP),微軟的ASP,以及PHP!我喜歡把當(dāng)時(shí)的參考架構(gòu)比作成IIS和ASP.NET,你可以用Visual Studio快速構(gòu)建一個(gè)可伸縮并且安全的應(yīng)用程序。(因?yàn)閏gi交互不怎么好,所以在服務(wù)器上開始寫(jsp,asp,php動(dòng)態(tài)語言代碼了進(jìn)行幫助查找數(shù)據(jù),查找圖片,動(dòng)態(tài)語言效率更高))

4:直到當(dāng)時(shí),web服務(wù)器多半會(huì)返回整個(gè)頁面或者文檔,但AJAX(2005)的出現(xiàn),讓事情變得很有意思。AJAX允許客戶端的JavaScript腳本為局部頁面提供請(qǐng)求服務(wù),然后可以在無需回到服務(wù)器情況下動(dòng)態(tài)刷新部分頁面,也就是更新瀏覽器中的document對(duì)象,通常稱作DOM,或者文檔對(duì)象模型。(javascript的出現(xiàn)讓用戶更加快速的更改,修改頁面內(nèi)容,而不用再去訪問WEB服務(wù)器去請(qǐng)求,返回HTML修改頁面啦!javascript訪問更快)

雖然從服務(wù)器端返回的仍然是HTML,但瀏覽器上的代碼能把這HTML片段內(nèi)嵌到當(dāng)前頁面中。也就是說web應(yīng)用的響應(yīng)可以更快,這時(shí)我們真正用web應(yīng)用取代了web頁面。谷歌的GMail和谷歌地圖都是當(dāng)時(shí)AJAX的殺手級(jí)產(chǎn)品。隨后用AJAX局部刷新就如雨后春筍般出現(xiàn)。

5:在隨后的幾年時(shí)間里,AJAX成為了焦點(diǎn),但在服務(wù)器端仍然使用著舊有的技術(shù)。大概在2007年,37signals公司公開其成員–Ruby>(這時(shí)候后臺(tái)框架打開了新的大門,后端框架先被提出來的,現(xiàn)在的前端趨勢也開始要有MVC的前端框架啦!WEB前端全棧開發(fā),node.js直接訪問數(shù)據(jù)庫,mongo數(shù)據(jù)庫,)

6:在2007到2010年期間,涌現(xiàn)了3種開發(fā)潮流:

第一個(gè)是智能手機(jī)和移動(dòng)應(yīng)用潮流。通常情況下,許多應(yīng)用程序同時(shí)有web和移動(dòng)應(yīng)用兩種版本。盡管如此,服務(wù)端仍然返回的是HTML頁面,而不是其它移動(dòng)應(yīng)用可以識(shí)別。因此,你需要返回的是結(jié)構(gòu)化數(shù)據(jù)來取代HTML。

第二個(gè)開發(fā)潮流是jQuery。這是一個(gè)非常流行的JavaScript庫,能夠很容易構(gòu)建動(dòng)態(tài)、美妙的web應(yīng)用,甚至是AJAX!

第三個(gè)潮流是Node.js的發(fā)布。這是第一次能讓你用JavaScript開發(fā)高性能的服務(wù)端程序,進(jìn)而可能結(jié)束“客戶端開發(fā)者”要知道HTML/JavaScript,“服務(wù)端開發(fā)者”要知道.NET/C#/Ruby這樣的噩夢(mèng)。(json是服務(wù)器向?yàn)g覽器返回的一種數(shù)據(jù)結(jié)構(gòu),瀏覽器解析json提取里面的key-value鍵值對(duì),服務(wù)器端(jsp,php)可以把數(shù)據(jù)庫里面的數(shù)據(jù)封裝到j(luò)son中,發(fā)給瀏覽器)

7:盡管這是一個(gè)不錯(cuò)的架構(gòu),但我們可以重用一些在客戶端的收獲去簡化那些曾經(jīng)發(fā)生在像客戶端意大利面似的jQuery代碼。和Rails精神類似,我們需要用一種規(guī)定的方式從服務(wù)端獲取到數(shù)據(jù),再對(duì)客戶端的HTML頁面進(jìn)行包裝。因此,在接下來的2年時(shí)間里,業(yè)界出現(xiàn)了許多用于簡化客戶端開發(fā)的框架,諸如Backbone,Ember,Derby和Meteor,當(dāng)然也包括我的最愛,AngularJS,vlue.js。(這些東西訪問數(shù)據(jù)庫,把數(shù)據(jù)從服務(wù)器取出到瀏覽器,瀏覽器MVC再去解析數(shù)據(jù))

8:因此,這就是我們看到的今天,而我后面要講到的參考架構(gòu)是這樣的,mongodb作為數(shù)據(jù)庫服務(wù)器,node/express作為web應(yīng)用服務(wù)器,客戶端使用AngularJS,同時(shí)也使用Bootstrap樣式風(fēng)格。我發(fā)現(xiàn)這種架構(gòu)允許我能夠快速構(gòu)建web服務(wù)以及基于AngularJS的客戶端接口,甚至和其它的服務(wù),如PhoneGap或者其它原生移動(dòng)開發(fā)工具一樣,進(jìn)行移動(dòng)應(yīng)用的開發(fā)。(這種開發(fā)模式越來越可以快速開發(fā)啦!應(yīng)用到webapp開發(fā),這些前端一般用于業(yè)務(wù)型強(qiáng),主要用于給用戶展現(xiàn)內(nèi)容和數(shù)據(jù),業(yè)務(wù)型比較強(qiáng)的。移動(dòng)端開發(fā)還有Java原生開發(fā)的,主要用于邏輯性強(qiáng)的。Java安卓原生開發(fā)(處理密碼處理,過濾什么的)邏輯性比較強(qiáng)的應(yīng)用?,F(xiàn)在APP可以使用混合式開發(fā)(webapp(html+css+javascript(mui移動(dòng)端js框架)+node.js+mongo)+原生Java開發(fā)),現(xiàn)在網(wǎng)站開發(fā)用的還是html+css+javascript(包括js框架)前端+后端(ssh+ssm+springboot框架))。這就是現(xiàn)在主流的開發(fā)模式。

https://blog.csdn.net/zzzkk2009/article/details/9849431 經(jīng)典的安卓移動(dòng)端開發(fā)(web+Java原生開發(fā))web系統(tǒng)發(fā)展歷史

https://blog.csdn.net/z742182637/article/details/52055970 也是web系統(tǒng)開發(fā)歷史(不怎么清晰,不是太好)

https://blog.csdn.net/youngyouth/article/details/84755278#web_5 web服務(wù)器架構(gòu)的發(fā)展歷史

1. 靜態(tài)頁面時(shí)代

大學(xué)時(shí)候,上機(jī)還得換卡穿拖鞋,Novell的網(wǎng)絡(luò)是很神奇的,然而更神奇的是通訊原理老師半神秘的講他上 Internet,“Cernet(教育網(wǎng))有條64K的出口,半年前還很快,現(xiàn)在已經(jīng)比較卡了”。就這樣,我們用Netscape指向Yahoo。那是一個(gè)HTML加圖片的世界,充斥著各種花哨閃耀的字體和鞠躬的小人,藍(lán)色連接點(diǎn)擊后會(huì)奇幻的變色。

我們開始用不熟練的HTML和簡陋的設(shè)計(jì)來設(shè)計(jì)網(wǎng)頁,并且知道這邊有個(gè)瀏覽器,那邊有個(gè)叫WebServer的東西,但管理Sun工作站的機(jī)房老師總是盯的很緊,不會(huì)讓你動(dòng)系統(tǒng)半分。聽說有個(gè)叫Linux的神奇東西,好吧我想嘗試,可是我只有一臺(tái)攢的電腦,以及若干張5寸3寸的軟盤。我至今感謝一位師兄,他幫我下載并切分了一個(gè)版本的Mandrake,就這樣室友看到非常奇怪的一幕,我奔波在機(jī)房宿舍之間,仔細(xì)計(jì)算容量來拷貝,就這樣在假期里我第一次搭建了Apache。

2. CGI時(shí)代

很快頁面上流行一個(gè)叫做計(jì)數(shù)器的東西,免費(fèi)的收費(fèi)的建站網(wǎng)站都把它當(dāng)作賣點(diǎn),“立體超炫變色時(shí)尚計(jì)數(shù)器”,很快我們看到幾乎每個(gè)頁面都有了一個(gè)點(diǎn)擊量在88888的酷裝置,只是無論怎么點(diǎn)都不會(huì)變化。而校園里張貼著令人眼紅的廣告,“征人寫CGI程序,一支500元!“。

慢慢的,知道了CGI是利用進(jìn)程間輸入輸出通信,和WebServer進(jìn)行通信,從而可以寫程序來控制頁面輸出的內(nèi)容。但在當(dāng)時(shí)會(huì)給硬盤分區(qū)就在中關(guān)村被看成電腦高手的年代,實(shí)在是會(huì)者寥寥。即便到了今天,我依然對(duì)Perl敬而遠(yuǎn)之。一些前輩用C寫出更高級(jí)的CGI應(yīng)用,比如WebMail,挖到第一桶金,成為今天互聯(lián)網(wǎng)的先驅(qū)。

3. PHP露出鋒芒

說實(shí)話,我認(rèn)為PHP是最受益于互聯(lián)網(wǎng)浪潮的語言,在合適的時(shí)間和好伙伴Mysql一起出現(xiàn)。利用Apache的模塊mod-php,將php作為web服務(wù)器的一部分運(yùn)行,效率和維護(hù)性都達(dá)到很好的提升。腳本語言成為互聯(lián)網(wǎng)前端開發(fā)主力一直到今天。PHP和大哥Perl,以及兄弟Python,Ruby一起盤據(jù)在編程語言排行榜5-10名位置。

同樣的Mysql也是時(shí)代的嬌子,它快速靈活易用成為網(wǎng)站數(shù)據(jù)庫的首選,但很長時(shí)間里,Mysql被其他數(shù)據(jù)庫詬病,別說Oracle等高富帥,即便是同為開源的Postgres社區(qū)里,也會(huì)有這樣的聲音,“不支持事務(wù)也叫數(shù)據(jù)庫?”。沒關(guān)系,開源社區(qū)很快為其加入各種引擎,如今Mysql絕對(duì)是裝機(jī)總量第一的數(shù)據(jù)庫。

4. J2EE

Java時(shí)代來臨,一杯咖啡,一個(gè)可跳動(dòng)的小精靈牽動(dòng)了所有的大型軟件公司。沒錯(cuò)是所有,包括微軟,Sun公司一時(shí)星光無限,所有的開發(fā)人員都在談Java。人們對(duì)其桌面表現(xiàn)失望進(jìn)而質(zhì)疑時(shí),J2EE及時(shí)出現(xiàn)了,Servlet+JSP快速成為Web開發(fā)的好用技術(shù)。能夠跨平臺(tái),獨(dú)立解包使用的Web服務(wù)器,掛接任意數(shù)據(jù)庫的JDBC接口,一時(shí)世界變得很美好。

微軟的ASP也出現(xiàn)了,一開始也是腳本解釋,和PHP等技術(shù)類似。很快微軟的C#和dotNET戰(zhàn)略出臺(tái),ASP也升級(jí)為ASP.Net,從此dotNET和J2EE是競爭者,更是一對(duì)站在相同站壕的朋友,互相學(xué)習(xí)和抄襲對(duì)方的技術(shù)和設(shè)計(jì),直到今天。

5. Web層框架百花齊放

Servlet是一個(gè)優(yōu)異的Web技術(shù)規(guī)范,但面對(duì)叢多的開發(fā)需求,還是不能很好的覆蓋。Struts框架很快成為主流,今天我們依然看到很多.do后綴的頁面。Struts主要做了三件事,一是對(duì)請(qǐng)求Url進(jìn)行很好的梳理,通過Command模式把請(qǐng)求指配到Action對(duì)象上,并可以用同期出現(xiàn)的Ioc框架進(jìn)行注入。二是梳理出若干有用好用的Intecepter,并可以自由組合構(gòu)成自己的Stack。三是對(duì)頁面流轉(zhuǎn)流程通過xml的方式可以靈活定義。

同期,數(shù)以百計(jì)的各種框架出現(xiàn)了,多數(shù)都是針對(duì)Servlet的空白點(diǎn),在幾個(gè)方面進(jìn)行代碼或者配置的約定,可謂百花齊放,百家爭鳴,我想Java社區(qū)能到今天依然繁榮,這種海納百川,開放的態(tài)度是根本原因。如今很多框架已經(jīng)走過生命期,但還有很多活躍的,其中Webwork即Struts2,和SpringMVC是模板技術(shù)類別最出色的。GWT,Wicket等在頁面組件類表現(xiàn)不錯(cuò),還有脫離Servlet束縛Play等框架。

6. WithoutEJB

J2EE里,除了Servlet外另一個(gè)重量級(jí)的規(guī)范就是EJB。EJB設(shè)計(jì)的來源是Corba技術(shù),分布式對(duì)象技術(shù)在EJB規(guī)范中有完整的體現(xiàn)。Rod在著作中對(duì)EJB規(guī)范粗重龐大難用提出各種質(zhì)疑,尤其是針對(duì)其強(qiáng)制分布的要求。我的觀念是分布式支持沒有錯(cuò),現(xiàn)在EJB規(guī)范中對(duì)于Local和Remote的劃分定義是正確的。開發(fā)人員應(yīng)該一開始就需要了解接口粒度的劃分,本地和遠(yuǎn)程接口是不同的。對(duì)于一般的小型應(yīng)用,Servlet和EJB容器都在一個(gè)虛擬機(jī)中,本地接口是合理的,但對(duì)于大型企業(yè)應(yīng)用和互聯(lián)網(wǎng)級(jí)別應(yīng)用,勢必需要服務(wù)的遠(yuǎn)程劃分和調(diào)用。所以早期的EJB,可以說一方面設(shè)計(jì)不完備,另一方面又過度設(shè)計(jì)。但EJB自從3以后完全脫胎換骨,成為設(shè)計(jì)良好的規(guī)范。

Spring作為開發(fā)框架,把Ioc和AOP能力發(fā)揮的淋漓盡致,在各個(gè)層次很好融合其他技術(shù)和項(xiàng)目庫,一直是Java Web開發(fā)的主流。不過面對(duì)CDI等JavaEE規(guī)范,在注入,生命期管理,對(duì)象解耦等優(yōu)勢不在。我預(yù)計(jì)今后Spring, JavaEE和Osgi會(huì)在主流Java開發(fā)框架方向競爭,也會(huì)相互借鑒和融合。

7. Ajax

Javascript是瀏覽器正統(tǒng)的腳本語言,但在那個(gè)機(jī)器性能不佳的年代,一段Js代碼造成鼠標(biāo)沒有響應(yīng)的情況比比皆是。Js的給人影響就是頁面上飄來飄去“點(diǎn)擊我”對(duì)話框,頁面上走馬燈效果的變色通告,或者是幾十層模態(tài)對(duì)話框的惡意頁面,很多網(wǎng)吧的機(jī)器默認(rèn)Js是禁用的。在很長的一段時(shí)間里,Java web開發(fā)一個(gè)潛規(guī)則就是少手寫Js文件,這樣可以很好的支持多種瀏覽器和提高效率。

谷歌火了,Ajax也成為火爆的前端技術(shù),我們?cè)谑褂胓mail,google map等產(chǎn)品時(shí),有了另一種體驗(yàn),點(diǎn)擊鏈接或按鈕后,即便網(wǎng)絡(luò)不算流暢,頁面不再全白重新刷新,而是內(nèi)容漸漸的出現(xiàn)。其原理就是利用Js腳本到后臺(tái)服務(wù)器獲取數(shù)據(jù),在瀏覽器前端對(duì)數(shù)據(jù)進(jìn)行解析和渲染,在這個(gè)過程中,大多數(shù)頁面并不需要進(jìn)行改變,只是更新頁面中一部分即可。谷歌公司大力支持Firefox使其重生,并和蘋果一起發(fā)展webkit項(xiàng)目,各自發(fā)展了chrome和safari瀏覽器,伴隨者頁面渲染能力大力提升同時(shí),Js腳本的解析能力也突飛猛進(jìn)。我個(gè)人認(rèn)為Ajax這個(gè)技術(shù)看似簡單,但卻是新一代Web,所謂Web2.0的基石性質(zhì)技術(shù),為互聯(lián)網(wǎng)泡沫后互聯(lián)網(wǎng)的復(fù)興和今日騰飛起到了重要作用。

8. Ruby and Rails

快速成長的互聯(lián)網(wǎng)需要快速的web開發(fā)能力,Rails框架出現(xiàn)了,同時(shí)火爆的還有Ruby語言,它的出現(xiàn)滿足了當(dāng)時(shí)開發(fā)者的需要,快速開發(fā),玩cool的東西,有完備的后端模型支持。讓我們仔細(xì)分析一下Rails中MVC就能發(fā)現(xiàn),Model中對(duì)實(shí)體對(duì)象的關(guān)系定義,和JavaEE的JPA很多概念一致,但利用Ruby語言的元能力,可以直接對(duì)實(shí)體對(duì)象進(jìn)行功能擴(kuò)展,而其時(shí)Java社區(qū)還在為貧血,充血對(duì)象爭論不休。Control,View等層次也能和Java的一些框架概念一致,不過有些設(shè)計(jì)構(gòu)思更巧妙,而且Rails的基因就是滿足互聯(lián)網(wǎng)開發(fā)需要,和JavaEE企業(yè)級(jí)應(yīng)用有所不同。

很快的,各種語言紛紛出現(xiàn)模仿Rails的項(xiàng)目,Java的Grails, SpringROO,JBossForge,Python的Django,PHP的Symfony等等。毫無例外的,能有影響力的都是開源的,有良好社區(qū)能力建設(shè)的項(xiàng)目。

9. JSF和CDI

讓我們回到企業(yè)應(yīng)用開發(fā),大家有沒有想過所謂企業(yè)應(yīng)用和互聯(lián)網(wǎng)應(yīng)用之間最大的差別是什么?我認(rèn)為是用戶數(shù)量級(jí)別的差異,導(dǎo)致前端設(shè)計(jì)方式,軟件體系,后臺(tái)數(shù)據(jù)庫,緩存技術(shù)應(yīng)用,有不同的設(shè)計(jì)理念和方式。用更技術(shù)化來說,就是會(huì)話和事務(wù)。企業(yè)應(yīng)用是有強(qiáng)會(huì)話和事務(wù)需求的,而這兩個(gè)技術(shù)詞語也會(huì)一并關(guān)聯(lián)存在。很簡單,在一個(gè)事務(wù)中會(huì)經(jīng)過多次會(huì)話過程,直到這個(gè)事務(wù)全部做完。和我們?nèi)粘^k事是一樣的,填單子,和辦事人員溝通,修改單據(jù),蓋章,各種口舌,最終感慨,辦事真難。

從軟件層面考慮,一個(gè)企業(yè)應(yīng)用軟件可能用戶數(shù)并不太多,就企業(yè)中百十號(hào)人,但前后臺(tái)的交互是長時(shí)間,多次會(huì)話交互的。JSF技術(shù)其實(shí)是借鑒了微軟ASP.net,它們繼承了傳統(tǒng)IDE快速開發(fā)的思路,希望通過拖拽連接可以快速開發(fā)一個(gè)應(yīng)用。頁面上的組件,對(duì)應(yīng)后臺(tái)服務(wù)器的業(yè)務(wù)組件,在得到服務(wù)器請(qǐng)求之后,組件需要做一系列動(dòng)作來完成解析,校驗(yàn),模型重建,業(yè)務(wù)方法調(diào)用,頁面渲染等步驟,這些必然有個(gè)較長的過程。復(fù)雜性,效率,和其他技術(shù)的融合,JSF技術(shù)從誕生起就被質(zhì)疑不斷,而且面對(duì)每個(gè)明星技術(shù),都有些格格不入,比如Ajax出現(xiàn)了,而JSF要求的Post方式還需要重刷頁面。但JSF一直在改進(jìn),越來越科學(xué)完善。如今,配合CDI,JSF是企業(yè)應(yīng)用開發(fā)的首選技術(shù)之一,大家可以研究一下Oracle的應(yīng)用產(chǎn)品和ADF開發(fā)框架。

CDI是Seam框架的技術(shù)精華形成的JavaEE規(guī)范,在JavaEE7里面已經(jīng)成為最重要的規(guī)范之一。和Hibernate最終形成JPA一樣,CDI也是GavinKing構(gòu)思,開發(fā)推動(dòng)的。仔細(xì)分析就會(huì)發(fā)現(xiàn),CDI幾乎彌補(bǔ)了JavaEE在現(xiàn)代開發(fā)需求中,對(duì)象方面定義的絕大多數(shù)不足,比如和DI規(guī)范定義了注入,生命期管理和會(huì)話范圍定義,完善了EJB對(duì)于普通POJO對(duì)于事務(wù),異步通知機(jī)制的定義,還有注解的堆疊定義,裝飾模式等等。有時(shí)候我就在想,假如JavaEE是GK從頭打造,我們開發(fā)人員會(huì)少走很多彎路,因?yàn)樗麑?duì)企業(yè)應(yīng)用的理解和用Java構(gòu)建框架和定義規(guī)范,都是貼近一線開發(fā)人員需求。唯一遺憾的就是CDI還沒有推動(dòng)完成,他轉(zhuǎn)移興趣玩起語言了。關(guān)于JSF和CDI,我建議做相關(guān)產(chǎn)品的朋友,即便不用這樣的組合,最好也對(duì)其技術(shù)基本內(nèi)容有所了解,我想對(duì)思路擴(kuò)展是非常有好處的。

10. Netty,NodeJs,Vertx和異步化趨勢

Netty的領(lǐng)導(dǎo)者和Mina的主力開發(fā)者TrustLee,是一個(gè)說話慢條斯里的韓國人。面試時(shí)問我一個(gè)關(guān)于volatile問題,雙方都覺得非母語很別扭,所以就都簡單表達(dá)一下就算??晌覜]想到這個(gè)同齡的開發(fā)人員,日后對(duì)Java在互聯(lián)網(wǎng)公司的地位提升,起到這么大的作用,這個(gè)項(xiàng)目就是Netty。我們都知道Java異步集合庫的作者DougLea的功勞,Nio1代,對(duì)于Socket的異步化還不是很完善,即便是Nio2,工作重心還是文件系統(tǒng)的異步化處理,網(wǎng)絡(luò)層的異步化設(shè)計(jì)逐步加強(qiáng)改進(jìn)。因?yàn)镴ava的設(shè)計(jì)理念,正交化,接口堆疊,底層功能平臺(tái)統(tǒng)一化等給異步分布式網(wǎng)絡(luò)框架留出足夠的空間去發(fā)揮,Netty,Mina,Grizzly等項(xiàng)目紛紛出現(xiàn)。Twitter宣布從Ruby轉(zhuǎn)向Scala,并使用Netty讓其大紅大紫。

所謂異步網(wǎng)絡(luò)框架,就是對(duì)網(wǎng)絡(luò)層調(diào)用,進(jìn)行異步化,并進(jìn)行接口封裝,使得容易理解和使用。異步能力還是通過Java虛擬機(jī)現(xiàn)有功能實(shí)現(xiàn)的,通過對(duì)數(shù)據(jù)流的處理和狀態(tài)感知來進(jìn)行處理,而不是傳統(tǒng)的阻塞式的收發(fā)消息。這個(gè)符合我們生活中的感受,當(dāng)你訂票時(shí),你會(huì)打電話告訴你需要什么,說訂好票給我電話,然后你就去做別的事情,直到訂票員通知你訂好了來支付取票再進(jìn)行下一步操作,如果訂票是同步的,那你就要一直等待訂票完成,遇到春運(yùn)可能會(huì)搭上整天的時(shí)間。

為什么異步網(wǎng)絡(luò)框架也受到重視,答案也是互聯(lián)網(wǎng),數(shù)以億計(jì)的請(qǐng)求點(diǎn)擊涌來時(shí),傳統(tǒng)的webserver頂不住了,采用一個(gè)線程服務(wù)一個(gè)請(qǐng)求模型的webserver,無法承受這么大的數(shù)據(jù)訪問,特別對(duì)于Java這樣的吃內(nèi)存語言,一個(gè)請(qǐng)求占用了一個(gè)線程,同時(shí)也占用了相對(duì)應(yīng)的若干資源。用企業(yè)應(yīng)用的設(shè)計(jì)的整個(gè)架構(gòu)面對(duì)互聯(lián)網(wǎng)級(jí)別的應(yīng)用時(shí),有點(diǎn)崩潰的感覺。解決高并發(fā)大量請(qǐng)求的途徑是高吞吐量加上可擴(kuò)展的軟件架構(gòu)。異步化可以提升吞吐量,就和銀行的排隊(duì)機(jī)一樣,顧客來了得到排隊(duì)服務(wù),當(dāng)有可用的柜臺(tái)服務(wù)時(shí)會(huì)主動(dòng)通知顧客,我們可以設(shè)想,即使有再多的顧客,也可以通過增加業(yè)務(wù)柜臺(tái),少許增加排隊(duì)機(jī)和少量人工協(xié)調(diào)處理來解決。

NodeJs是一個(gè)異步化的基于Javascript的開發(fā)框架,是當(dāng)前的明星技術(shù),符合了一些當(dāng)前開發(fā)需求,如異步化,前端Js技術(shù)廣泛應(yīng)用,Js引擎能力極大提升,NoSQL的火爆,組件構(gòu)建模式變化等。利用Js語言函數(shù)式編程能力,Js開發(fā)人員可以很輕松的利用已有的組件開發(fā)后端應(yīng)用,前端可以直接用瀏覽器處理Js,別忘了Js是瀏覽器唯一能統(tǒng)一識(shí)別的腳本語言,或者用JQuery,AngularJS等流行框架,世界很清凈,都是Js。

但我們需要了解在常駐內(nèi)存服務(wù)型程序方面,Java等語言占有極大優(yōu)勢,Java社區(qū)很快出現(xiàn)了和NodeJs有相同設(shè)計(jì)思路的項(xiàng)目,Vertx就是其中的優(yōu)秀代表。它充分借鑒了NodeJs和Erlang/OTP Actor模型的優(yōu)秀設(shè)計(jì),利用分布式消息機(jī)制進(jìn)行對(duì)象間通信,利用Netty進(jìn)行網(wǎng)絡(luò)異步操作,方法調(diào)用倡導(dǎo)異步調(diào)用,有自己的模塊化機(jī)制。這樣,Java社區(qū)出現(xiàn)了和NodeJs競爭的技術(shù)框架,良好使用,可以解決大規(guī)?;ヂ?lián)網(wǎng)應(yīng)用的需求。

Java領(lǐng)域的異步化趨勢可以說剛剛開始,我們看到Servlet和EJB都加入異步支持,Spring的Reactor,JBoss的undertow,隨著Java8對(duì)函數(shù)語言能力的增強(qiáng),可以預(yù)見又會(huì)有叢多的項(xiàng)目產(chǎn)生。我關(guān)注著異步化趨勢和JavaEE開發(fā)方式的融合之路,相信那是Web開發(fā)的明天。

相關(guān)案例查看更多