最近由于工作需要,準(zhǔn)備從前端往后端發(fā)展發(fā)展,遇到的第一個(gè)難題就是需要在服務(wù)器上搭建web框架,之前也大概的了解過什么Apache,Tomcat,Nginx,jetty,node之類的,但是完全沒搞清楚這幾個(gè)有什么區(qū)別,通過一段時(shí)間的了解,這篇文章旨在為新人對(duì)這些框架提供一個(gè)初步的概念。本文僅供參考,轉(zhuǎn)職程序員一枚,歡迎指教。

1. Web 服務(wù)器是什么?web框架又是什么?
WEB服務(wù)器主要功能是提供網(wǎng)上信息瀏覽服務(wù)。當(dāng)Web瀏覽器(客戶端)連到服務(wù)器上并請(qǐng)求文件時(shí),服務(wù)器將處理該請(qǐng)求并將文件反饋到該瀏覽器上,附帶的信息會(huì)告訴瀏覽器如何查看該文件(即文件類型)。服務(wù)器使用HTTP協(xié)議與客戶機(jī)瀏覽器進(jìn)行信息交流,這就是人們常把它們稱為HTTP服務(wù)器的原因。Web服務(wù)器不僅能夠存儲(chǔ)信息,還能在用戶通過Web瀏覽器提供的信息的基礎(chǔ)上運(yùn)行腳本和程序。
web框架是什么?其實(shí)可以把服務(wù)器就當(dāng)做一個(gè)大程序來看待,web框架的作用就是讓你更加方便的去使用它,發(fā)揮它的最大功能。
如果不去使用框架,直接使用服務(wù)器自帶功能,也可以實(shí)現(xiàn)基本需求,但是在不同的網(wǎng)絡(luò)環(huán)境里面,對(duì)網(wǎng)絡(luò)的需求,不僅僅是能夠進(jìn)行網(wǎng)絡(luò)通信,還需要很多不同的需求,如果不將服務(wù)器隔離開來,那么會(huì)相當(dāng)不靈活,處理這些需求,會(huì)很費(fèi)事,甚至無法完成。下面是一些需求:
a.高性能:nginx和apache通過配置就可以大大的提高不同場(chǎng)景下的性能,對(duì)高并發(fā)更加是優(yōu)化得很徹底了。
b.安全:對(duì)ssl的支持,證書的支持,其他服務(wù)器很可能沒實(shí)現(xiàn)或者實(shí)現(xiàn)不統(tǒng)一。
c.代理分發(fā):統(tǒng)一了入口點(diǎn),避免暴露內(nèi)部復(fù)雜的環(huán)境。
2. Apache,Tomcat,Nginx,jetty,node這些框架到底是什么,有什么區(qū)別嗎?
首先要有一個(gè)概念,其實(shí)web服務(wù)器應(yīng)該是分成兩類來看待的,第一類是web服務(wù)器,第二類是應(yīng)用服務(wù)器。
web服務(wù)器:將某一個(gè)文本文件的內(nèi)容通過HTTP協(xié)議返回到客戶端,但是這個(gè)文本文件的內(nèi)容是固定的——也就是說無論何時(shí)、任何人訪問它得到的內(nèi)容都是完全相同的,這樣的資源我們稱之為靜態(tài)資源。例如百度首頁,只需要載入圖標(biāo)和基本DOM元素,典型的靜態(tài)資源。
一個(gè) HTTP Server 關(guān)心的是 HTTP 協(xié)議層面的傳輸和訪問控制,所以在 Apache/Nginx 上你可以看到代理、負(fù)載均衡等功能。客戶端通過 HTTP Server 訪問服務(wù)器上存儲(chǔ)的資源(HTML 文件、圖片文件等等)。通過 CGI 技術(shù),也可以將處理過的內(nèi)容通過 HTTP Server 分發(fā),但是一個(gè) HTTP Server 始終只是把服務(wù)器上的文件如實(shí)的通過 HTTP 協(xié)議傳輸給客戶端。

應(yīng)用服務(wù)器:動(dòng)態(tài)資源則與之相反,在不同的時(shí)間、不同的客戶端訪問得到的內(nèi)容是不同的,典型的網(wǎng)站是網(wǎng)易云音樂,每一條評(píng)論,右側(cè)的熱門歌單,廣告,都是通過后臺(tái)去數(shù)據(jù)庫動(dòng)態(tài)的獲取的,每個(gè)人打開顯示的都不一樣。
應(yīng)用服務(wù)器是一個(gè)應(yīng)用執(zhí)行的容器。它首先需要支持開發(fā)語言的 Runtime(對(duì)于 Tomcat 來說,就是 Java),保證應(yīng)用能夠在應(yīng)用服務(wù)器上正常運(yùn)行。其次,需要支持應(yīng)用相關(guān)的規(guī)范,例如類庫、安全方面的特性。對(duì)于 Tomcat 來說,就是需要提供 JSP/Sevlet 運(yùn)行需要的標(biāo)準(zhǔn)類庫、Interface 等。

那么,這些框架是怎么分類的呢?
web服務(wù)器:Apache,Nginx等
應(yīng)用服務(wù)器:Tomcat,jetty,nodejs等
3.web服務(wù)框架Apache,Nginx之間的區(qū)別?
nginx :
- 輕量級(jí),同樣起web 服務(wù),比apache 占用更少的內(nèi)存及資源
- 抗并發(fā),nginx 處理請(qǐng)求是異步非阻塞的,在高并發(fā)下nginx 能保持低資源低消耗高性能
- 高度模塊化的設(shè)計(jì),編寫模塊相對(duì)簡(jiǎn)單
- 社區(qū)活躍,各種高性能模塊出品迅速
apache :
- rewrite ,比nginx 的rewrite 強(qiáng)大
- 模塊超多,基本想到的都可以找到
- 少bug ,nginx 的bug 相對(duì)較多
- 超穩(wěn)定,在市場(chǎng)上仍然是主流
+在高并發(fā)時(shí)占用較多資源
一般來說,需要性能的web 服務(wù),用nginx 。如果不需要性能只求穩(wěn)定,例如一些大型公司或者金融公司之類,那就apache 吧。后者的各種功能模塊實(shí)現(xiàn)得比前者,例如ssl 的模塊就比前者好,可配置項(xiàng)多。
Nginx 配置簡(jiǎn)潔, Apache 復(fù)雜 ,Nginx 啟動(dòng)特別容易, 并且?guī)缀蹩梢宰龅?*24不間斷運(yùn)行,即使運(yùn)行數(shù)個(gè)月也不需要重新啟動(dòng). 你還能夠不間斷服務(wù)的情況下進(jìn)行軟件版本的升級(jí) . Nginx 靜態(tài)處理性能比 Apache 高 3倍以上 ,Apache 對(duì) PHP 支持比較簡(jiǎn)單,Nginx 需要配合其他后端來使用 ,Apache 的組件比 Nginx 多.
4.應(yīng)用框架Tomcat,jetty,node之間的區(qū)別?
Tomcat:
Tomcat 服務(wù)器是一個(gè)免費(fèi)的開放源代碼的Web 應(yīng)用服務(wù)器(主要用于解析servlet/JSP,同時(shí)具備http服務(wù)),技術(shù)先進(jìn)、性能穩(wěn)定,而且免費(fèi),因而深受Java 愛好者的喜愛并得到了部分軟件開發(fā)商的認(rèn)可。其運(yùn)行時(shí)占用的系統(tǒng)資源小,擴(kuò)展性好,且支持負(fù)載平衡與郵件服務(wù)等開發(fā)應(yīng)用系統(tǒng)常用的功能。作為一個(gè)小型的輕量級(jí)應(yīng)用服務(wù)器,Tomcat在中小型系統(tǒng)和并發(fā)訪問用戶不是很多的場(chǎng)合下被普遍使用,成為目前比較流行的Web 應(yīng)用服務(wù)器。
jetty:
Jetty采用業(yè)界最優(yōu)的開源Java Web引擎,將Java社區(qū)中下載量最大,用戶數(shù)最多,標(biāo)準(zhǔn)支持最完備的Tomcat內(nèi)核作為其Servlet容器引擎,并加以審核和調(diào)優(yōu)。單純的Tomcat性能有限,在很多地方表現(xiàn)有欠缺,如活動(dòng)連接支持、靜態(tài)內(nèi)容、大文件和HTTPS等。除了性能問題,Tomcat的另一大缺點(diǎn)是它是一個(gè)受限的集成平臺(tái),僅能運(yùn)行Java應(yīng)用程序。企業(yè)在使用時(shí)Tomcat,往往還需同時(shí)部署Apache WebServer以與之整合。此配置較為繁瑣,且不能保證性能的優(yōu)越性。
Tomcat,jetty兩者都是Servlet容器,按照Servlet和JSP規(guī)范實(shí)現(xiàn),功能上類似。Jetty的應(yīng)用更加快速,修改簡(jiǎn)單,對(duì)新的Servlet規(guī)范的支持較好。Tomcat目前應(yīng)用比較廣泛,對(duì)JavaEE和Servlet的支持更加全面,很多特性會(huì)直接集成進(jìn)來。
什么是servlet容器呢?即實(shí)現(xiàn)HttpServletRequest、HttpServletResponse、HttpSession等等接口,解析http請(qǐng)求,通過類加載器加載對(duì)應(yīng)的servlet實(shí)現(xiàn)類并調(diào)用。也就是說servlet容器必須由java或者基于jvm的語言實(shí)現(xiàn)。
node:這個(gè)單獨(dú)拿出來說,大概看一下,因?yàn)槟壳皠倓偦鹌饋?,目前比較偏向于做應(yīng)用框架和后臺(tái)邏輯開發(fā)以及前端工具使用,商業(yè)上沒有上面兩個(gè)成熟,暫僅僅做興趣研究。
總結(jié)下來,現(xiàn)在用戶要求越來越高,服務(wù)帶寬需求越來越大,在需求驅(qū)動(dòng)的情況下推出了各種框架,使用時(shí)先區(qū)分框架類型,再去按照項(xiàng)目的實(shí)際情況去使用框架,每個(gè)框架都有自己的優(yōu)缺點(diǎn),適合的才是最好的。
如果有疑問,歡迎聯(lián)系我,后面一段時(shí)間會(huì)對(duì)每一個(gè)框架的安裝,配置,功能性能測(cè)試,寫出更詳細(xì)的文章。