最近由于工作需要缀去,準備從前端往后端發(fā)展發(fā)展,遇到的第一個難題就是需要在服務器上搭建web框架识脆,之前也大概的了解過什么Apache设联,Tomcat,Nginx灼捂,jetty离例,node之類的,但是完全沒搞清楚這幾個有什么區(qū)別悉稠,通過一段時間的了解宫蛆,這篇文章旨在為新人對這些框架提供一個初步的概念。本文僅供參考的猛,轉(zhuǎn)職程序員一枚耀盗,歡迎指教。
1. Web 服務器是什么卦尊?web框架又是什么叛拷?
WEB服務器主要功能是提供網(wǎng)上信息瀏覽服務。當Web瀏覽器(客戶端)連到服務器上并請求文件時岂却,服務器將處理該請求并將文件反饋到該瀏覽器上忿薇,附帶的信息會告訴瀏覽器如何查看該文件(即文件類型)。服務器使用HTTP協(xié)議與客戶機瀏覽器進行信息交流躏哩,這就是人們常把它們稱為HTTP服務器的原因署浩。Web服務器不僅能夠存儲信息,還能在用戶通過Web瀏覽器提供的信息的基礎(chǔ)上運行腳本和程序扫尺。
web框架是什么筋栋?其實可以把服務器就當做一個大程序來看待,web框架的作用就是讓你更加方便的去使用它器联,發(fā)揮它的最大功能二汛。
如果不去使用框架婿崭,直接使用服務器自帶功能,也可以實現(xiàn)基本需求肴颊,但是在不同的網(wǎng)絡(luò)環(huán)境里面氓栈,對網(wǎng)絡(luò)的需求,不僅僅是能夠進行網(wǎng)絡(luò)通信婿着,還需要很多不同的需求授瘦,如果不將服務器隔離開來,那么會相當不靈活竟宋,處理這些需求提完,會很費事,甚至無法完成丘侠。下面是一些需求:
a.高性能:nginx和apache通過配置就可以大大的提高不同場景下的性能徒欣,對高并發(fā)更加是優(yōu)化得很徹底了。
b.安全:對ssl的支持蜗字,證書的支持打肝,其他服務器很可能沒實現(xiàn)或者實現(xiàn)不統(tǒng)一。
c.代理分發(fā):統(tǒng)一了入口點挪捕,避免暴露內(nèi)部復雜的環(huán)境粗梭。
2. Apache,Tomcat级零,Nginx断医,jetty,node這些框架到底是什么奏纪,有什么區(qū)別嗎鉴嗤?
首先要有一個概念,其實web服務器應該是分成兩類來看待的亥贸,第一類是web服務器躬窜,第二類是應用服務器。
web服務器:將某一個文本文件的內(nèi)容通過HTTP協(xié)議返回到客戶端炕置,但是這個文本文件的內(nèi)容是固定的——也就是說無論何時荣挨、任何人訪問它得到的內(nèi)容都是完全相同的,這樣的資源我們稱之為靜態(tài)資源朴摊。例如百度首頁默垄,只需要載入圖標和基本DOM元素,典型的靜態(tài)資源甚纲。
一個 HTTP Server 關(guān)心的是 HTTP 協(xié)議層面的傳輸和訪問控制口锭,所以在 Apache/Nginx 上你可以看到代理、負載均衡等功能【椴伲客戶端通過 HTTP Server 訪問服務器上存儲的資源(HTML 文件韭寸、圖片文件等等)。通過 CGI 技術(shù)荆隘,也可以將處理過的內(nèi)容通過 HTTP Server 分發(fā)恩伺,但是一個 HTTP Server 始終只是把服務器上的文件如實的通過 HTTP 協(xié)議傳輸給客戶端。
應用服務器:動態(tài)資源則與之相反椰拒,在不同的時間晶渠、不同的客戶端訪問得到的內(nèi)容是不同的,典型的網(wǎng)站是網(wǎng)易云音樂燃观,每一條評論褒脯,右側(cè)的熱門歌單,廣告缆毁,都是通過后臺去數(shù)據(jù)庫動態(tài)的獲取的番川,每個人打開顯示的都不一樣。
應用服務器是一個應用執(zhí)行的容器脊框。它首先需要支持開發(fā)語言的 Runtime(對于 Tomcat 來說爽彤,就是 Java),保證應用能夠在應用服務器上正常運行缚陷。其次,需要支持應用相關(guān)的規(guī)范往核,例如類庫箫爷、安全方面的特性。對于 Tomcat 來說聂儒,就是需要提供 JSP/Sevlet 運行需要的標準類庫虎锚、Interface 等。
那么衩婚,這些框架是怎么分類的呢窜护?
web服務器:Apache,Nginx等
應用服務器:Tomcat非春,jetty柱徙,nodejs等
3.web服務框架Apache,Nginx之間的區(qū)別?
nginx :
- 輕量級奇昙,同樣起web 服務护侮,比apache 占用更少的內(nèi)存及資源
- 抗并發(fā),nginx 處理請求是異步非阻塞的储耐,在高并發(fā)下nginx 能保持低資源低消耗高性能
- 高度模塊化的設(shè)計羊初,編寫模塊相對簡單
- 社區(qū)活躍,各種高性能模塊出品迅速
apache :
- rewrite 什湘,比nginx 的rewrite 強大
- 模塊超多长赞,基本想到的都可以找到
- 少bug 晦攒,nginx 的bug 相對較多
- 超穩(wěn)定,在市場上仍然是主流
+在高并發(fā)時占用較多資源
一般來說得哆,需要性能的web 服務脯颜,用nginx 。如果不需要性能只求穩(wěn)定柳恐,例如一些大型公司或者金融公司之類伐脖,那就apache 吧。后者的各種功能模塊實現(xiàn)得比前者乐设,例如ssl 的模塊就比前者好讼庇,可配置項多。
Nginx 配置簡潔, Apache 復雜 近尚,Nginx 啟動特別容易, 并且?guī)缀蹩梢宰龅?*24不間斷運行蠕啄,即使運行數(shù)個月也不需要重新啟動. 你還能夠不間斷服務的情況下進行軟件版本的升級 . Nginx 靜態(tài)處理性能比 Apache 高 3倍以上 ,Apache 對 PHP 支持比較簡單戈锻,Nginx 需要配合其他后端來使用 ,Apache 的組件比 Nginx 多.
4.應用框架Tomcat歼跟,jetty,node之間的區(qū)別?
Tomcat:
Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器(主要用于解析servlet/JSP,同時具備http服務)格遭,技術(shù)先進哈街、性能穩(wěn)定,而且免費拒迅,因而深受Java 愛好者的喜愛并得到了部分軟件開發(fā)商的認可骚秦。其運行時占用的系統(tǒng)資源小,擴展性好璧微,且支持負載平衡與郵件服務等開發(fā)應用系統(tǒng)常用的功能作箍。作為一個小型的輕量級應用服務器,Tomcat在中小型系統(tǒng)和并發(fā)訪問用戶不是很多的場合下被普遍使用前硫,成為目前比較流行的Web 應用服務器胞得。
jetty:
Jetty采用業(yè)界最優(yōu)的開源Java Web引擎,將Java社區(qū)中下載量最大屹电,用戶數(shù)最多阶剑,標準支持最完備的Tomcat內(nèi)核作為其Servlet容器引擎,并加以審核和調(diào)優(yōu)嗤详。單純的Tomcat性能有限个扰,在很多地方表現(xiàn)有欠缺,如活動連接支持葱色、靜態(tài)內(nèi)容递宅、大文件和HTTPS等。除了性能問題,Tomcat的另一大缺點是它是一個受限的集成平臺办龄,僅能運行Java應用程序烘绽。企業(yè)在使用時Tomcat,往往還需同時部署Apache WebServer以與之整合俐填。此配置較為繁瑣悟泵,且不能保證性能的優(yōu)越性警没。
Tomcat,jetty兩者都是Servlet容器,按照Servlet和JSP規(guī)范實現(xiàn)篱昔,功能上類似屁置。Jetty的應用更加快速蕾盯,修改簡單竹揍,對新的Servlet規(guī)范的支持較好。Tomcat目前應用比較廣泛痕鳍,對JavaEE和Servlet的支持更加全面硫豆,很多特性會直接集成進來。
什么是servlet容器呢笼呆?即實現(xiàn)HttpServletRequest熊响、HttpServletResponse、HttpSession等等接口诗赌,解析http請求汗茄,通過類加載器加載對應的servlet實現(xiàn)類并調(diào)用。也就是說servlet容器必須由java或者基于jvm的語言實現(xiàn)铭若。
node:這個單獨拿出來說剔难,大概看一下,因為目前剛剛火起來奥喻,目前比較偏向于做應用框架和后臺邏輯開發(fā)以及前端工具使用,商業(yè)上沒有上面兩個成熟非迹,暫僅僅做興趣研究环鲤。
總結(jié)下來,現(xiàn)在用戶要求越來越高憎兽,服務帶寬需求越來越大冷离,在需求驅(qū)動的情況下推出了各種框架,使用時先區(qū)分框架類型纯命,再去按照項目的實際情況去使用框架西剥,每個框架都有自己的優(yōu)缺點,適合的才是最好的亿汞。
如果有疑問瞭空,歡迎聯(lián)系我,后面一段時間會對每一個框架的安裝,配置咆畏,功能性能測試南捂,寫出更詳細的文章。