服務器軟件大掃盲

先說一句哈,自從在 B 站開始刷視頻後,我就以爲要學的內容實在是太多了。這篇「服務器軟件大掃盲」就是我看了羊哥的一期視頻後有感而發的,好比說 Web 服務器、HTTP 服務器、應用服務器這三個概念,我是見過不少次,但若是你非要我說出它們之間的區別的話,我只好啞口無言。java

還有,我本身用過的 Tomcat、Nginx、Apache、Jetty、Undertow,它們之間有什麼優缺點,嗯。。。。。。只好繼續啞口無言。可能有不少小夥伴和我同樣,用過,但具體的差異還真的說不上來,因此我打算借這個機會來和你們一塊兒學習下。(我就是課表明,我驕傲)nginx

先來講 Web 服務器,它通常指的是網站服務器,能夠向瀏覽器(PC端或者移動端)等 Web 客戶端提供服務,供請求數據或者下載數據。服務器使用 HTTP (超文本傳輸協議)和客戶端瀏覽器進行通訊,所以咱們也把 Web 服務器稱做爲 HTTP 服務器。git

再來講應用服務器,它是一種軟件框架,提供一個應用程序運行的環境。一般用於爲應用程序提供安全、數據、事務支持、負載平衡大型分佈式系統管理等服務。程序員

在我看來,Web 服務器和應用服務器之間的界限已經很是模糊,後者更高級一點,就好像公司與企業這兩個名詞之間的差異。github

常見的 Web 服務器軟件包括 Nginx、Apache、IIS,常見的應用服務器軟件包括 WebLogic、JBoss,前者更輕量級,後者更重量級。web

接下來,咱們就來嘮嘮常見的一些服務器軟件。面試

0一、Tomcat

就個人程序生涯來看,Tomcat 用的算是最多了,沒有之一。若是 Tomcat 安裝成功的話,能夠在本地的瀏覽器中訪問 http://127.0.0.1:8080 來展現它的默認首頁,見下圖。數據庫

Tomcat 是由 Apache 軟件基金會屬下 Jakarta 項目開發的 Servlet 容器,實現了對 Servlet 和 JavaServer Page(JSP)的支持,並提供了做爲 Web 服務器的一些特有功能。apache

JSP 是由 Sun Microsystems 公司主導創建的一種動態網頁技術標準。 JSP 能夠響應客戶端發送的請求,並根據請求內容動態地生成 HTML、XML 或其餘格式文檔的 Web 網頁,而後返回給請求者。瀏覽器

JSP 以 Java 語言做爲腳本語言,爲用戶的 HTTP 請求提供服務,並能與服務器上的其它 Java 程序共同處理複雜的業務需求。我是一名三線城市的 Java 程序員,免不了要開發一些小型網站,這也就是爲何我用 Tomcat 最多的緣由。

0二、Nginx

Nginx 是一款輕量級的 Web 服務器、也支持反向代理,因爲它的內存佔用少,啓動極快,高併發能力強,因此在互聯網項目中普遍應用。

關於 Nginx,比較使人遺憾的一件事是,它的做者伊戈爾·賽索耶夫進了監獄。

Nginx 在官方測試的結果中,可以支持五萬個並行鏈接,國內比較有名的公司,好比說百度、京東、新浪、網易、騰訊、淘寶等都在使用。

不知道你有沒有聽過虛擬主機的概念,就是在 Web 服務裏有一個獨立的網站站點,這個站點對應獨立的域名(也多是IP 或端口),具備獨立的程序及資源,能夠獨立地對外提供服務供用戶訪問。

虛擬主機有三種類型:基於域名的虛擬主機、基於端口的虛擬主機、基於 IP 的虛擬主機。

Nginx 可使用一個 server{} 標籤來標識一個虛擬主機,一個 Web 服務裏能夠有多個虛擬主機標籤對,便可以同時支持多個虛擬主機站點。這一點,很是的實用。

0三、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。

0四、Jetty

Jetty 和 Tomcat 有不少類似之處,好比說能夠爲 JSP 和 Servlet 提供運行時環境。Jetty 是 Java 語言編寫的,它的 API 以一組 JAR 包的形式發佈。

與 Tomcat 相比,Jetty 能夠同時處理大量連接而且長時間的保持這些連接,例如,一些 Web 聊天應用很是適合用 Jetty 服務器,好比說淘寶的 Web 版旺旺。

Jetty 的架構比較簡單,它有一個基本數據模型,這個數據模型就是 Handler,全部能夠被擴展的組件均可以做爲一個 Handler,添加到 Server 中,Jetty 就是幫咱們管理這些 Handler 的。

0五、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。

0六、企業級

至於其餘的一些企業級服務器軟件,我我的沒有用過,就不細說了。

  • JBoss,紅帽子收購過,後改名爲 WildFly。

  • WebLogic,甲骨文出品。

  • WebSphere,IBM 公司出品。

相信小夥伴們看了出品方,就知道這些服務器軟件足夠的重量級,都是大佬,都是大佬。

若是以爲文章對你有點幫助,請微信搜索「 沉默王二 」第一時間閱讀。

本文已收錄 GitHub,傳送門~ ,裏面更有大廠面試完整考點,歡迎 Star。

我是沉默王二,一枚有顏值卻靠才華苟且的程序員。關注便可提高學習效率,別忘了三連啊,點贊、收藏、留言,我不挑,嘻嘻

相關文章
相關標籤/搜索