先說一句哈,自從在 B 站開始刷視訊後,我就覺得要學的內容實在是太多了。這篇“伺服器軟體大掃盲”就是我看了羊哥的一期視訊後有感而發的,比如說 Web 伺服器、HTTP 伺服器、應用伺服器這三個概念,我是見過很多次,但如果你非要我說出它們之間的區別的話,我只好啞口無言。
還有,我自己用過的 Tomcat、Nginx、Apache、Jetty、Undertow,它們之間有什麼優缺點,嗯。。。。。。只好繼續啞口無言。可能有很多小夥伴和我一樣,用過,但具體的差別還真的說不上來,所以我打算借這個機會來和大家一起學習下。(我就是課代表,我驕傲)
先來說 Web 伺服器,它一般指的是網站伺服器,可以向瀏覽器(PC端或者移動端)等 Web 客戶端提供服務,供請求資料或者下載資料。伺服器使用 HTTP (超文字傳輸協議)和客戶端瀏覽器進行通訊,因此我們也把 Web 伺服器稱作為 HTTP 伺服器。
再來說應用伺服器,它是一種軟體框架,提供一個應用程式執行的環境。通常用於為應用程式提供安全、資料、事務支援、負載平衡大型分散式系統管理等服務。
在我看來,Web 伺服器和應用伺服器之間的界限已經非常模糊,後者更高階一點,就好像公司與企業這兩個名詞之間的差別。
常見的 Web 伺服器軟體包括 Nginx、Apache、IIS,常見的應用伺服器軟體包括 WebLogic、JBoss,前者更輕量級,後者更重量級。
接下來,我們就來嘮嘮常見的一些伺服器軟體。
01、Tomcat
就我的程式生涯來看,Tomcat 用的算是最多了,沒有之一。如果 Tomcat 安裝成功的話,可以在本地的瀏覽器中訪問 http://127.0.0.1:8080 來展示它的預設首頁,見下圖。
Tomcat 是由 Apache 軟體基金會屬下 Jakarta 專案開發的 Servlet 容器,實現了對 Servlet 和 JavaServer Page(JSP)的支援,並提供了作為 Web 伺服器的一些特有功能。
JSP 是由 Sun Microsystems 公司主導建立的一種動態網頁技術標準。 JSP 可以響應客戶端傳送的請求,並根據請求內容動態地生成 HTML、XML 或其他格式文件的 Web 網頁,然後返回給請求者。
JSP 以 Java 語言作為指令碼語言,為使用者的 HTTP 請求提供服務,並能與伺服器上的其它 Java 程式共同處理複雜的業務需求。我是一名三線城市的 Java 程式設計師,免不了要開發一些小型網站,這也就是為什麼我用 Tomcat 最多的原因。
02、Nginx
Nginx 是一款輕量級的 Web 伺服器、也支援反向代理,由於它的記憶體佔用少,啟動極快,高併發能力強,所以在網際網路專案中廣泛應用。
關於 Nginx,比較令人遺憾的一件事是,它的作者伊戈爾·賽索耶夫進了監獄。
Nginx 在官方測試的結果中,能夠支援五萬個並行連線,國內比較有名的公司,比如說百度、京東、新浪、網易、騰訊、淘寶等都在使用。
不知道你有沒有聽過虛擬主機的概念,就是在 Web 服務裡有一個獨立的網站站點,這個站點對應獨立的域名(也可能是IP 或埠),具有獨立的程式及資源,可以獨立地對外提供服務供使用者訪問。
虛擬主機有三種型別:基於域名的虛擬主機、基於埠的虛擬主機、基於 IP 的虛擬主機。
Nginx 可以使用一個 server{}
標籤來標識一個虛擬主機,一個 Web 服務裡可以有多個虛擬主機標籤對,即可以同時支援多個虛擬主機站點。這一點,非常的實用。
03、Apache
最開始的時候,我以為 Apache 就是 Tomcat,傻傻分不清楚。後來知道它們完全不同,logo 就不同(說什麼大實話)。
Apache 一般是指 Apache HTTP Server,是 Apache 軟體基金會(和 Tomcat 同屬一家基金會,因此容易混淆)下的一個網頁伺服器軟體。由於其跨平臺和安全性,被廣泛使用,是最流行的 Web 伺服器軟體之一。它快速、可靠並且可通過簡單的 API 擴充套件。
我是在伺服器上安裝 WordPress 的時候用到了 Apache,當時並不知道有 LAMP 的存在,所以安裝的過程中吃了很多苦,關鍵是最後沒有安裝成功,大寫的尷尬。
最後還是在青銅群裡的一個群友的遠端幫助下才完成安裝的,他是搞 PHP 的。LAMP 就是他告訴我的,安裝起來非常的傻瓜式,非常適合我這種對命令列有抗拒心理的程式設計師。
LAMP 是指一組執行動態網站或者伺服器的自由軟體名稱首字母縮寫:
- Linux,作業系統(一般伺服器軟體都安裝在 Linux 上,效能極佳)
- Apache,網頁伺服器(就是 Apache HTTP Server)
- MariaDB 或 MySQL,資料庫管理系統
- PHP、Perl 或 Python,指令碼語言
這些軟體配合起來使用的時候,極具活力,它的變體還有很多,另外一個比較有名的就是 LNMP,用 Nginx 代替 Apache。
04、Jetty
Jetty 和 Tomcat 有很多相似之處,比如說可以為 JSP 和 Servlet 提供執行時環境。Jetty 是 Java 語言編寫的,它的 API 以一組 JAR 包的形式釋出。
與 Tomcat 相比,Jetty 可以同時處理大量連結並且長時間的保持這些連結,例如,一些 Web 聊天應用非常適合用 Jetty 伺服器,比如說淘寶的 Web 版旺旺。
Jetty 的架構比較簡單,它有一個基本資料模型,這個資料模型就是 Handler,所有可以被擴充套件的元件都可以作為一個 Handler,新增到 Server 中,Jetty 就是幫我們管理這些 Handler 的。
05、Undertow
Undertow 是一個用 Java 編寫的、靈活的、高效能的 Web 伺服器,提供基於 NIO 的阻塞和非阻塞 API。
Undertow 可以嵌入到應用程式中或獨立執行,只需幾行程式碼,非常容易上手。下面這段程式碼是官網提供的一個使用 Async IO 的簡單 Hello World 伺服器示例:
public class HelloWorldServer {
public static void main(final String[] args) {
Undertow server = Undertow.builder()
.addHttpListener(8080, "localhost")
.setHandler(new HttpHandler() {
@Override
public void handleRequest(final HttpServerExchange exchange) throws Exception {
exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
exchange.getResponseSender().send("Hello World");
}
}).build();
server.start();
}
}
直接執行後,在瀏覽器中位址列中輸入 http://localhost:8080
就可以訪問到了。是不是感覺非常輕巧?
如果有小夥伴使用過 JFinal 開發過小型網站的話,對 Undertow 應該不會陌生,因為 JFinal 的預設容器已經切換到了 Undertow。
JFinal 是基於 Java 語言的極速 WEB + ORM 框架,其核心設計目標是開發迅速、程式碼量少、學習簡單、功能強大、輕量級、易擴充套件、Restful。
06、企業級
至於其他的一些企業級伺服器軟體,我個人沒有用過,就不細說了。
JBoss,紅帽子收購過,後更名為 WildFly。
WebLogic,甲骨文出品。
WebSphere,IBM 公司出品。
相信小夥伴們看了出品方,就知道這些伺服器軟體足夠的重量級,都是大佬,都是大佬。
如果覺得文章對你有點幫助,請微信搜尋「 沉默王二 」第一時間閱讀。
本文已收錄 GitHub,傳送門~ ,裡面更有大廠面試完整考點,歡迎 Star。
我是沉默王二,一枚有顏值卻靠才華苟且的程式設計師。關注即可提升學習效率,別忘了三連啊,點贊、收藏、留言,我不挑,嘻嘻。