摘要:在做數(shù)據(jù)分析和人工智能方面也有很多可以直接使用的算法庫。各方面都能找到優(yōu)秀的組件。但開發(fā)起來復(fù)雜一些,更適合有一定規(guī)模的團(tuán)隊(duì)采用。
對(duì)語言之間優(yōu)勢這個(gè)問題,可以寫幾本書來具體闡述. 我嘗試簡單地說一點(diǎn)。不見得對(duì),也不可能完整,僅供參考。
互聯(lián)網(wǎng)興起,靜態(tài)頁面不能滿足復(fù)雜的交互需求. 出現(xiàn)了動(dòng)態(tài)技術(shù).
史前時(shí)期動(dòng)態(tài)Web 開發(fā)多采用CGI 技術(shù)來實(shí)現(xiàn).
CGI 將腳本作為多帶帶的進(jìn)程運(yùn)行, 每個(gè)請(qǐng)求都使用環(huán)境變量、標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出來與它 "通信 "。
這是種互對(duì)低效的運(yùn)行方式. 出現(xiàn)了類似isapi, ASP 這樣技術(shù)(ASP 1.0 發(fā)布于1996年12月, 作為 IIS 3.0的一部分). 方便多了,有了session管理, 有了內(nèi)置對(duì)象.
但也有明顯缺點(diǎn),代碼與頁面混在一起.
接下來提出Servlet標(biāo)準(zhǔn),參考實(shí)現(xiàn)是Tomcat.
Tomcat的作為Servlet 規(guī)范一個(gè)開源的參考實(shí)現(xiàn), 最初是Sun公司在1998年11月發(fā)布的. 核心人物是 James Duncan Davidson.
Tomcat 3.0合并了Sun捐贈(zèng)的Java Web Server代碼, 這個(gè)版本實(shí)現(xiàn)了Servlet 2.2和JSP 1.1規(guī)范.
目前由Apache軟件基金維護(hù).
它是一個(gè)開放的標(biāo)準(zhǔn),引發(fā)了當(dāng)時(shí)的一些開發(fā)熱潮,
產(chǎn)生了大量的中間件,也稱為應(yīng)用服務(wù)器, 如WebSphere, WebLogic, GlassFish, JBoss, Jetty, Resin,金蝶的Apusic. 這里面有的是完整實(shí)現(xiàn)了J2EE標(biāo)準(zhǔn).如WebLogic:
標(biāo)準(zhǔn)具體有,Servlet, JSP, EJB, JDBC, Java Message Service, JTA, XML相關(guān), JAAS 等等.
有的只是一小部分實(shí)現(xiàn),如Tomcat:只有Servlet, JSP, Java EL, JNDI等.
對(duì)企業(yè)開發(fā)來說,這樣的標(biāo)準(zhǔn)有諸多的好處,解決了很多需要重復(fù)解決的問題,如消息隊(duì)列,分布式事務(wù)等等. 應(yīng)用只需根據(jù)接口開發(fā)就可以了,實(shí)現(xiàn)由應(yīng)用服務(wù)器來完成.
因?yàn)閺?fù)雜,過重,適合中等以上團(tuán)隊(duì)開發(fā).
Tomcat/Servlet的體系之所以這么設(shè)計(jì),基于幾點(diǎn)考慮:
方便擴(kuò)展
遵循標(biāo)準(zhǔn)化定義
保持版本間的兼容性
好處是穩(wěn)定,值得依賴,不會(huì)為個(gè)別商業(yè)機(jī)構(gòu)左右.
不好的是地方是升級(jí)相對(duì)慢, 與nodejs社區(qū)的飛速發(fā)展相比, Java顯得沉重而緩慢.
但這未嘗不是好事, 對(duì)于開發(fā)人員來說, 這是非常好的長效投資. 保證工作經(jīng)驗(yàn)的積累是有效的, 而不是忽略業(yè)務(wù)追逐技術(shù)去適應(yīng)迎接不暇的新版本.
Python 2到Python 3的過渡即是斷堐式的. 而Java最早的代碼仍可以跑在今天的虛擬機(jī)上.
Node.js也存在很多版本間的問題, 但因?yàn)槭悄_本,而不是編譯,出錯(cuò)時(shí)不會(huì)告訴你是版本的是問題, 而是報(bào)告各種奇怪的異常. 當(dāng)然,這是題外話了.
Tomcat 內(nèi)部的體系結(jié)構(gòu)
Tomcat 有非常優(yōu)秀的結(jié)構(gòu)定義
核心部分有:
Catalina - 實(shí)現(xiàn)Servlet API
Coyote - HTTP協(xié)議棧
Jasper - JSP 動(dòng)態(tài)編譯器及加載器, 負(fù)責(zé)把JSP頁面編譯成Servlet
可以看出以上全部的核心是 Servlet 規(guī)范.
作為互聯(lián)網(wǎng)的基礎(chǔ)設(shè)施,Tomcat歷經(jīng)20年,沒有本質(zhì)上改動(dòng), 可見當(dāng)初設(shè)計(jì)才的洞見.
可以與其媲美的有估計(jì)只有以太網(wǎng)口的設(shè)計(jì), HTTP的設(shè)計(jì), TCP/IP 的設(shè)計(jì),USB接口的設(shè)計(jì).
Tomcat 的配置項(xiàng)與代碼隔離, 個(gè)人認(rèn)為這是Tomcat設(shè)計(jì)最精良的地方
你可以在不改代碼的前提下,對(duì)tomcat各個(gè)層面環(huán)節(jié)進(jìn)行配置,從而實(shí)現(xiàn)多種協(xié)議多種特性的支持
與Python和Nodejs的Web Server的比較
都遵循HTTP/1.0 and HTTP/1.1 協(xié)議
但用Java寫的Web 應(yīng)用支持更高層的Servlet 接口, 可以在不同應(yīng)用服務(wù)器中運(yùn)行,不需要對(duì)代碼進(jìn)行調(diào)整,
Python和Nodejs都有很多Web Server的實(shí)現(xiàn), 但這些Servers之間顯然沒有更高層次的抽象, 如需要切換,需要做大量改動(dòng)和測試.
假設(shè)在你Server A 上做開發(fā), 忽然發(fā)現(xiàn)Server B 上有你想的的特性, 你只有大幅改動(dòng)才行.
Python 下的Web服務(wù)器, 核心標(biāo)準(zhǔn) WSGI
Python 下也有很多Web Server 軟件,如CherryPy WSGI Server, Gunicorn, Tornado, Twisted Web, uWSGI, Waitress WSGI Server等等.
這個(gè)服務(wù)器都支持[WSGI]2規(guī)范.
需要指出的是WSGIv1.0.1出現(xiàn)的時(shí)間是: 26-Sep-2010, 比Java相應(yīng)規(guī)范晚了十多年. 出來時(shí)已經(jīng)是群雄混戰(zhàn),想統(tǒng)一已經(jīng)很難了,
也使得WSGI 是一個(gè)相對(duì)簡單,容易實(shí)現(xiàn)的規(guī)范, 以此來吸引服務(wù)器開發(fā)者. 在此之前則是 CGI, FastCGI, mod_python三分天下的局面.
Node.js下的Web服務(wù)器:light-server, live-server ,lite-server, http-server
基本以輕量級(jí)的靜態(tài)文件服務(wù)器為主。
總結(jié)一下
名稱 Java Python Node.js
典型的WebServer Tomcat Tornado http-server
標(biāo)準(zhǔn) Servlet WSGI 無
服務(wù)器端模板 JSP,Freemarker tornado.template CoffeKup, Swig, Jade
典型 Web框架 Spring MVC Flask, Django Express
數(shù)據(jù)庫相關(guān) JDBC, Hibernate SQLAlchemy Moogoose
多線程與分布式 容易 不清楚 不清楚
日志 Log4j, Slf4j 不清楚 不清楚
遠(yuǎn)程調(diào)試 容易 不清楚 不清楚
結(jié)論:
各有優(yōu)勢,如Nodejs配合前端模板技術(shù)如Vue.js采用前后端分離的json/ajax作為數(shù)據(jù)格式在一些場景下很有吸引力。Python在做數(shù)據(jù)分析和人工智能方面也有很多可以直接使用的算法庫。Java的優(yōu)勢更在于包羅萬象。各方面都能找到優(yōu)秀的組件。但開發(fā)起來復(fù)雜一些,更適合有一定規(guī)模的團(tuán)隊(duì)采用。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41802.html
摘要:在做數(shù)據(jù)分析和人工智能方面也有很多可以直接使用的算法庫。各方面都能找到優(yōu)秀的組件。但開發(fā)起來復(fù)雜一些,更適合有一定規(guī)模的團(tuán)隊(duì)采用。 對(duì)語言之間優(yōu)勢這個(gè)問題,可以寫幾本書來具體闡述. 我嘗試簡單地說一點(diǎn)。不見得對(duì),也不可能完整,僅供參考。 互聯(lián)網(wǎng)興起,靜態(tài)頁面不能滿足復(fù)雜的交互需求. 出現(xiàn)了動(dòng)態(tài)技術(shù).史前時(shí)期動(dòng)態(tài)Web 開發(fā)多采用CGI 技術(shù)來實(shí)現(xiàn). CGI 將腳本作為單獨(dú)的進(jìn)程運(yùn)行, ...
摘要:程序員的入門規(guī)劃我該學(xué)習(xí)什么語言這個(gè)問題困擾了幾乎所有的程序員,比如應(yīng)用廣好就業(yè),比如入門簡單,和安卓待遇高,和開發(fā)效率高,是萬能語言,和前端缺人才等等個(gè)人見解先學(xué)習(xí)難度小,大眾化的編程語言,比如,,,這幾個(gè)學(xué)哪一種其實(shí)差不多,入門以后看自 程序員的入門規(guī)劃 1.我該學(xué)習(xí)什么語言? 這個(gè)問題困擾了幾乎所有的程序員,比如java應(yīng)用廣好就業(yè),比如php入門簡單,ios和安卓待遇高,rub...
摘要:程序員的入門規(guī)劃我該學(xué)習(xí)什么語言這個(gè)問題困擾了幾乎所有的程序員,比如應(yīng)用廣好就業(yè),比如入門簡單,和安卓待遇高,和開發(fā)效率高,是萬能語言,和前端缺人才等等個(gè)人見解先學(xué)習(xí)難度小,大眾化的編程語言,比如,,,這幾個(gè)學(xué)哪一種其實(shí)差不多,入門以后看自 程序員的入門規(guī)劃 1.我該學(xué)習(xí)什么語言? 這個(gè)問題困擾了幾乎所有的程序員,比如java應(yīng)用廣好就業(yè),比如php入門簡單,ios和安卓待遇高,rub...
摘要:年,保羅格雷厄姆在他的一篇文章中提到,他的公司決定使用一門編程語言。然而,仍未得到與其他語言同等的尊重。被評(píng)為年開發(fā)者調(diào)查中最受歡迎的框架。是中最流行的編程語言。也就是說,我認(rèn)為質(zhì)疑是否是一種真正的編程語言的時(shí)代已經(jīng)過去。 原文:JavaScript-A First-Class Language At Last作者:Tom Goldenberg譯者:LeviDing聲明:轉(zhuǎn)載請(qǐng)聯(lián)系本人...
摘要:年,保羅格雷厄姆在他的一篇文章中提到,他的公司決定使用一門編程語言。然而,仍未得到與其他語言同等的尊重。被評(píng)為年開發(fā)者調(diào)查中最受歡迎的框架。是中最流行的編程語言。也就是說,我認(rèn)為質(zhì)疑是否是一種真正的編程語言的時(shí)代已經(jīng)過去。 原文:JavaScript-A First-Class Language At Last作者:Tom Goldenberg譯者:LeviDing聲明:轉(zhuǎn)載請(qǐng)聯(lián)系本人...
閱讀 2490·2023-04-25 21:41
閱讀 1660·2021-09-22 15:17
閱讀 1931·2021-09-22 10:02
閱讀 2447·2021-09-10 11:21
閱讀 2586·2019-08-30 15:53
閱讀 1006·2019-08-30 15:44
閱讀 959·2019-08-30 13:46
閱讀 1149·2019-08-29 18:36