淺談Web服務(wù)器和應(yīng)用服務(wù)器的區(qū)別
通俗的講,Web服務(wù)器傳送(serves)頁(yè)面使瀏覽器可以瀏覽,然而應(yīng)用程序服務(wù)器提供的是客戶端應(yīng)用程序可以調(diào)用(call)的方法(methods)。確切一點(diǎn),你可以說(shuō):Web服務(wù)器專(zhuān)門(mén)處理HTTP請(qǐng)求(request),但是應(yīng)用程序服務(wù)器是通過(guò)很多協(xié)議來(lái)為應(yīng)用程序提供(serves)商業(yè)邏輯(business logic)。
下面讓我們來(lái)細(xì)細(xì)道來(lái):
Web服務(wù)器(Web Server)
Web服務(wù)器可以解析(handles)HTTP協(xié)議。當(dāng)Web服務(wù)器接收到一個(gè)HTTP請(qǐng)求(request),會(huì)返回一個(gè)HTTP響應(yīng)(response),例如送回一個(gè)HTML頁(yè)面。為了處理一個(gè)請(qǐng)求(request),Web服務(wù)器可以響應(yīng)(response)一個(gè)靜態(tài)頁(yè)面或圖片,進(jìn)行頁(yè)面跳轉(zhuǎn)(redirect),或者把動(dòng)態(tài)響應(yīng)(dynamic response)的產(chǎn)生委托(delegate)給一些其它的程序例如CGI腳本,JSP(JavaServer Pages)腳本,servlets,ASP(Active Server Pages)腳本,服務(wù)器端(server-side)JavaScript,或者一些其它的服務(wù)器端(server-side)技術(shù)。無(wú)論它們(譯者注:腳本)的目的如何,這些服務(wù)器端(server-side)的程序通常產(chǎn)生一個(gè)HTML的響應(yīng)(response)來(lái)讓瀏覽器可以瀏覽。
要知道,Web服務(wù)器的代理模型(delegation model)非常簡(jiǎn)單。當(dāng)一個(gè)請(qǐng)求(request)被送到Web服務(wù)器里來(lái)時(shí),它只單純的把請(qǐng)求(request)傳遞給可以很好的處理請(qǐng)求(request)的程序(譯者注:服務(wù)器端腳本)。Web服務(wù)器僅僅提供一個(gè)可以執(zhí)行服務(wù)器端(server-side)程序和返回(程序所產(chǎn)生的)響應(yīng)(response)的環(huán)境,而不會(huì)超出職能范圍。服務(wù)器端(server-side)程序通常具有事務(wù)處理(transaction processing),數(shù)據(jù)庫(kù)連接(database connectivity)和消息(messaging)等功能。
雖然Web服務(wù)器不支持事務(wù)處理或數(shù)據(jù)庫(kù)連接池,但它可以配置(employ)各種策略(strategies)來(lái)實(shí)現(xiàn)容錯(cuò)性(fault tolerance)和可擴(kuò)展性(scalability),例如負(fù)載平衡(load balancing),緩沖(caching)。集群特征(clustering—features)經(jīng)常被誤認(rèn)為僅僅是應(yīng)用程序服務(wù)器專(zhuān)有的特征。
應(yīng)用程序服務(wù)器(The Application Server)
根據(jù)我們的定義,作為應(yīng)用程序服務(wù)器,它通過(guò)各種協(xié)議,可以包括HTTP,把商業(yè)邏輯暴露給(expose)客戶端應(yīng)用程序。Web服務(wù)器主要是處理向?yàn)g覽器發(fā)送HTML以供瀏覽,而應(yīng)用程序服務(wù)器提供訪問(wèn)商業(yè)邏輯的途徑以供客戶端應(yīng)用程序使用。應(yīng)用程序使用此商業(yè)邏輯就象你調(diào)用對(duì)象的一個(gè)方法(或過(guò)程語(yǔ)言中的一個(gè)函數(shù))一樣。
應(yīng)用程序服務(wù)器的客戶端(包含有圖形用戶界面(GUI)的)可能會(huì)運(yùn)行在一臺(tái)PC、一個(gè)Web服務(wù)器或者甚至是其它的應(yīng)用程序服務(wù)器上。在應(yīng)用程序服務(wù)器與其客戶端之間來(lái)回穿梭(traveling)的信息不僅僅局限于簡(jiǎn)單的顯示標(biāo)記。相反,這種信息就是程序邏輯(program logic)。 正是由于這種邏輯取得了(takes)數(shù)據(jù)和方法調(diào)用(calls)的形式而不是靜態(tài)HTML,所以客戶端才可以隨心所欲的使用這種被暴露的商業(yè)邏輯。
在大多數(shù)情形下,應(yīng)用程序服務(wù)器是通過(guò)組件(component)的應(yīng)用程序接口(API)把商業(yè)邏輯暴露(expose)(給客戶端應(yīng)用程序)的,例如基于J2EE(Java 2 Platform, Enterprise Edition)應(yīng)用程序服務(wù)器的EJB(Enterprise JavaBean)組件模型。此外,應(yīng)用程序服務(wù)器可以管理自己的資源,例如看大門(mén)的工作(gate-keeping duties)包括安全(security),事務(wù)處理(transaction processing),資源池(resource pooling), 和消息(messaging)。就象Web服務(wù)器一樣,應(yīng)用程序服務(wù)器配置了多種可擴(kuò)展(scalability)和容錯(cuò)(fault tolerance)技術(shù)。
一個(gè)例子
例如,設(shè)想一個(gè)在線商店(網(wǎng)站)提供實(shí)時(shí)定價(jià)(real-time pricing)和有效性(availability)信息。這個(gè)站點(diǎn)(site)很可能會(huì)提供一個(gè)表單(form)讓你來(lái)選擇產(chǎn)品。當(dāng)你提交查詢(query)后,網(wǎng)站會(huì)進(jìn)行查找(lookup)并把結(jié)果內(nèi)嵌在HTML頁(yè)面中返回。網(wǎng)站可以有很多種方式來(lái)實(shí)現(xiàn)這種功能。我要介紹一個(gè)不使用應(yīng)用程序服務(wù)器的情景和一個(gè)使用應(yīng)用程序服務(wù)器的情景。觀察一下這兩中情景的不同會(huì)有助于你了解應(yīng)用程序服務(wù)器的功能。
情景1:不帶應(yīng)用程序服務(wù)器的Web服務(wù)器
在此種情景下,一個(gè)Web服務(wù)器獨(dú)立提供在線商店的功能。Web服務(wù)器獲得你的請(qǐng)求(request),然后發(fā)送給服務(wù)器端(server-side)可以處理請(qǐng)求(request)的程序。此程序從數(shù)據(jù)庫(kù)或文本文件(flat file,譯者注:flat file是指沒(méi)有特殊格式的非二進(jìn)制的文件,如properties和XML文件等)中查找定價(jià)信息。一旦找到,服務(wù)器端(server-side)程序把結(jié)果信息表示成(formulate)HTML形式,最后Web服務(wù)器把會(huì)它發(fā)送到你的Web瀏覽器。
簡(jiǎn)而言之,Web服務(wù)器只是簡(jiǎn)單的通過(guò)響應(yīng)(response)HTML頁(yè)面來(lái)處理HTTP請(qǐng)求(request)。
情景2:帶應(yīng)用程序服務(wù)器的Web服務(wù)器
情景2和情景1相同的是Web服務(wù)器還是把響應(yīng)(response)的產(chǎn)生委托(delegates)給腳本(譯者注:服務(wù)器端(server-side)程序)。然而,你可以把查找定價(jià)的商業(yè)邏輯(business logic)放到應(yīng)用程序服務(wù)器上。由于這種變化,此腳本只是簡(jiǎn)單的調(diào)用應(yīng)用程序服務(wù)器的查找服務(wù)(lookup service),而不是已經(jīng)知道如何查找數(shù)據(jù)然后表示為(formulate)一個(gè)響應(yīng)(response)。 這時(shí)當(dāng)該腳本程序產(chǎn)生HTML響應(yīng)(response)時(shí)就可以使用該服務(wù)的返回結(jié)果了。
在此情景中,應(yīng)用程序服務(wù)器提供(serves)了用于查詢產(chǎn)品的定價(jià)信息的商業(yè)邏輯。(服務(wù)器的)這種功能(functionality)沒(méi)有指出有關(guān)顯示和客戶端如何使用此信息的細(xì)節(jié),相反客戶端和應(yīng)用程序服務(wù)器只是來(lái)回傳送數(shù)據(jù)。當(dāng)有客戶端調(diào)用應(yīng)用程序服務(wù)器的查找服務(wù)(lookup service)時(shí),此服務(wù)只是簡(jiǎn)單的查找并返回結(jié)果給客戶端。
通過(guò)從響應(yīng)產(chǎn)生(response-generating)HTML的代碼中分離出來(lái),在應(yīng)用程序之中該定價(jià)(查找)邏輯的可重用性更強(qiáng)了。其他的客戶端,例如收款機(jī),也可以調(diào)用同樣的服務(wù)(service)來(lái)作為一個(gè)店員給客戶結(jié)帳。相反,在情景1中的定價(jià)查找服務(wù)是不可重用的因?yàn)樾畔?nèi)嵌在HTML頁(yè)中了。
總而言之,在情景2的模型中,在Web服務(wù)器通過(guò)回應(yīng)HTML頁(yè)面來(lái)處理HTTP請(qǐng)求(request),而應(yīng)用程序服務(wù)器則是通過(guò)處理定價(jià)和有效性(availability)請(qǐng)求(request)來(lái)提供應(yīng)用程序邏輯的。
警告(Caveats)
現(xiàn)在,XML Web Services已經(jīng)使應(yīng)用程序服務(wù)器和Web服務(wù)器的界線混淆了。通過(guò)傳送一個(gè)XML有效載荷(payload)給服務(wù)器,Web服務(wù)器現(xiàn)在可以處理數(shù)據(jù)和響應(yīng)(response)的能力與以前的應(yīng)用程序服務(wù)器同樣多了。
另外,現(xiàn)在大多數(shù)應(yīng)用程序服務(wù)器也包含了Web服務(wù)器,這就意味著可以把Web服務(wù)器當(dāng)作是應(yīng)用程序服務(wù)器的一個(gè)子集(subset)。雖然應(yīng)用程序服務(wù)器包含了Web服務(wù)器的功能,但是開(kāi)發(fā)者很少把應(yīng)用程序服務(wù)器部署(deploy)成這種功能(capacity)(譯者注:這種功能是指既有應(yīng)用程序服務(wù)器的功能又有Web服務(wù)器的功能)。相反,如果需要,他們通常會(huì)把Web服務(wù)器獨(dú)立配置,和應(yīng)用程序服務(wù)器一前一后。這種功能的分離有助于提高性能(簡(jiǎn)單的Web請(qǐng)求(request)就不會(huì)影響應(yīng)用程序服務(wù)器了),分開(kāi)配置(專(zhuān)門(mén)的Web服務(wù)器,集群(clustering)等等),而且給最佳產(chǎn)品的選取留有余地。
相關(guān)文章
Linux阿里云服務(wù)器中安裝Nginx命令的詳細(xì)過(guò)程
這篇文章主要介紹了Linux(阿里云服務(wù)器)中安裝Nginx命令,主要包括安裝nginx依賴(lài)和配置環(huán)境變量的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06
服務(wù)器Apache與Tomcat和Nginx的理解和對(duì)比分析詳解
今天小編就為大家分享一篇關(guān)于服務(wù)器Apache與Tomcat和Nginx的理解和對(duì)比分析詳解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-04-04
如何使用cpolar?內(nèi)網(wǎng)穿透將本地?web?網(wǎng)站發(fā)布上線(無(wú)需服務(wù)器)
這篇文章主要介紹了使用cpolar?內(nèi)網(wǎng)穿透將本地web網(wǎng)站發(fā)布上線(無(wú)需服務(wù)器),這里我們以macOS系統(tǒng)自帶的Apache為例,在本地啟用Apache服務(wù)器,并通過(guò)cpolar內(nèi)網(wǎng)穿透將其暴露至公網(wǎng),實(shí)現(xiàn)在外公網(wǎng)環(huán)境下訪問(wèn)本地web服務(wù),需要的朋友可以參考下2023-03-03
如何通過(guò)Apache Bench實(shí)現(xiàn)web壓力測(cè)試
這篇文章主要介紹了如何通過(guò)Apache Bench實(shí)現(xiàn)web壓力測(cè)試,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
Tornado Web服務(wù)器中處理空白字符的解決方案
這篇文章主要介紹了Tornado Web服務(wù)器中處理空白字符的解決方案,本文通過(guò)修改Tornado源碼解決這個(gè)問(wèn)題,需要的朋友可以參考下2015-01-01
cwrsync invalid uid nobody 解決方法
這篇文章主要介紹了使用rsync/cwrsync工具進(jìn)行檔案同步的時(shí)候出現(xiàn)invalid uid nobody錯(cuò)誤的解決方法,需要的朋友可以參考下2016-03-03
聯(lián)想服務(wù)器X3850 X6 配置RAID5陣列圖文方法
這篇文章主要介紹了聯(lián)想服務(wù)器X3850 X6 配置RAID5陣列圖文方法,需要的朋友可以參考下2018-05-05
一文詳解如何解決version?GLIBCXX_3.4.29?not?found問(wèn)題
這篇文章主要給大家介紹了關(guān)于如何解決version?GLIBCXX_3.4.29?not?found問(wèn)題的相關(guān)資料,文中通過(guò)圖文以及代碼代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01
WordPress升級(jí)版本及安裝插件出現(xiàn)”P(pán)roblem with the SSL CA cert”的解決辦法
最近有很多很有在使用WordPress升級(jí)版本及安裝插件時(shí)總是提示Problem with the SSL CA cert的問(wèn)題,如何解決呢?下面小編把我的解決辦法分享給大家,需要的朋友可以參考下2015-10-10

