⑴ 客戶端是什麼意思
客戶端」是和「伺服器端」相對的畢掘一種說法,客戶端也稱為用戶端,是指與伺服器相對應,為客戶提供本地服務的程序。
除了一些只在本地運行的應用程序之外,一般安裝在普通的客戶機上,需要與服務端互相配合運行,客戶端是不佔用內存程序的。
(1)什麼樣的客戶端伺服器跨平台擴展閱讀:
客戶端和伺服器端的區別
1、腳本語言的不同:
客戶端腳本語言中,有些是作為客戶端腳本語言來運行的,它們由客戶端的解釋器來解釋,如VBScript、javascrip、JScript等都可以作為客戶談乎端腳本語言,當它們嵌入到HTML文件中時,即可以按照順序被執行或者響應某個事件而對事件做出應答。
而另外一些作為服務端腳本語言來運行的,如php、CGI、JSP等,它們由服務端的解釋器來解釋,當作為服務端腳本語言來運行時,它們主要生成HTML內容,也可以生成客戶端腳本,當被傳到客戶端的瀏覽器時,這些客戶端腳本代碼也可以被解釋實現特定的功能。
2、執行的功能不同:
客戶端應該理解為C/S,即通過向客戶機上寫一些程序,保證即使伺服器端出現故障或者維護時候,客戶端依然可以在保證工作的前提下、實現離線工作。
伺服器主手侍核要應用於資料庫和Web服務,而PC主要應用於桌面計算和網路終端,設計根本出發點的差異決定了伺服器應該具備比PC更可靠的持續運行能力、更強大的存儲能力和網路通信能力,同時,對數據相當敏感的應用還要求伺服器提供數據備份功能。
⑵ web server與app server有什麼不同
1、處理問題不同
Web伺服器處理HTTP請求,而app伺服器基於多種不同的協議,處理應用程序的邏輯問題
2、功能不同
當web伺服器接收到一個請求,它只是簡單的將請求交給處理該請求的最優程序。除了為伺服器程序簡單的提供一個運行環境之外,web伺服器不提供任何功能。不同於web伺服器主要發送用來展示在瀏覽器上的HTML頁面,app伺服器為客戶端程序處理應用邏輯方面問題。
3、提供的服務不同
web伺服器一般會提供諸如容錯機制,負載均衡、緩存、集群等。app伺服器通過元件API,比如基於j2ee app伺服器的EJB,來提供應用邏輯。而更多的情況下,app伺服器自己管理自己的資源。這些責任(gate-keeping)包括安全、進程交互、資源池、消息分發等。
(2)什麼樣的客戶端伺服器跨平台擴展閱讀
主要web server產品
1、kangle
kangleweb伺服器(簡稱:kangle)是一款跨平台、功能強大、安全穩定、易操作的高性能web伺服器和反向代理伺服器軟體。除此:kangle也是一款專為做虛擬主機研發的web伺服器。實現虛擬主機獨立進程、獨立身份運行。
用戶之間安全隔離,一個用戶出問題不影響其他用戶。安全支持php、asp、net、java、ruby等多種動態開發語言。
2、nginx
Nginx(發音同 engine x)是一款輕量級的Web伺服器/反向代理伺服器及電子郵(IMAP/POP3)代理伺服器,並在一個BSD-like 協議下發行。由俄羅斯的程序設計師Igor Sysoev所開發,供俄國大型的入口網站及搜索引擎Rambler(俄文:Рамблер)使用。
其特點是佔有內存少,並發能力強,事實上nginx的並發能力確實在同類型的網頁伺服器中表現較好,中國大陸使用nginx網站用戶有:新浪、網易、騰訊等。
3、apache
Apache是世界使用排名第一的Web伺服器軟體。它可以運行在幾乎所有廣泛使用的計算機平台上,由於其跨平台和安全性被廣泛使用,是最流行的Web伺服器端軟體之一。
同時Apache音譯為阿帕奇,是北美印第安人的一個部落,叫阿帕奇族,在美國的西南部。也是一個基金會的名稱、一種武裝直升機等等。
app伺服器的功能。
場景1:web伺服器,而非app伺服器
在這個場景里,web伺服器獨自提供在線商店的功能。它接受用戶的請求,交給伺服器端程序處理。該伺服器端程序通過資料庫,或者純文本,查找到價格信息,然後生成HTML響應,通過web伺服器返回給用戶的瀏覽器。
總結來說,web伺服器僅需要接受HTTP請求,並響應HTML網頁。
場景2: web伺服器 + app伺服器
同場景1一樣,web伺服器仍然代理腳本生成的響應。但是你可以把業務邏輯部署在app伺服器上。
這樣,腳本就不需要去關注怎樣查詢和生成響應,而僅需要調用app伺服器提供查詢服務,從而利用其生成它的HTML響應。
在這個例子中,app伺服器提供了價格查詢的業務邏輯。這個邏輯不應該包含怎樣去展示,或者強迫客戶端使用這些數據。相反的是,客戶端和app伺服器進行交互,只有當客戶端調用了app伺服器的價格查詢服務的時候,該服務才查找到信息並返回。
同HTML代碼生成分離開後,價格查詢邏輯的復用性提高了。另外一個客戶端,比如收銀機,同樣可以調用這個介面。而場景1里,價格查詢服務就很難被重用,因為它和HTML頁面緊密聯系。
總結來說,第二個場景中,web伺服器處理HTTP請求,並返回HTML頁面,而app伺服器處理業務邏輯。
⑶ 什麼是跨平台
跨平台泛指程序語言、軟體或硬體設備可以在多種作業系統或不同硬體架構的電腦上運作。
廣義面言,一般的計算語言都可做到跨平台,開發商只需要提供各種平台下的Runtime/中間件環境即可。嚴格而言是指用某種計算機語言編制的程序只需要做小量的修改,編譯之後即可在另外一種平台下運行,此時並不提供Runtime/中間件環境。例如Java是一種提供Runtime環境的跨平台解決方案,而C而是一種標准且嚴格的跨平台語言。
跨平台概念是軟體開發中一個重要的概念,即不依賴於操作系統,也不信賴硬體環境。一個操作系統下開發的應用,放到另一個操作系統下依然可以運行。相對而言如果某種計算機語言不用修改代碼即可做到高度跨平台,那麼此語言就越抽象,硬體控制力就越低,只適合開發高度抽象的模型系統。諸如java,delphi和易語言,都已做到了跨平台。它們將可以在多種系統下開發,運行和維護。
大部分電腦語言從絕對意義而言,都是跨平台的:因為都是以高級的、人類可讀的方式來對CPU發號指令,這樣也就沒必要依賴於任何作業系統。但如果要用系統的部件工具箱,來新建用戶圖形界面(GUI),就可能會用到開發員特定系統中的API函數或庫類。雖然C++是跨平台的,但Windows下用到Win32 API的C++程式,一般就不能在Unix機器上編譯。不同編譯器對語言規范的解釋也有所差異。這樣的話,在針對不同系統進行構建之前,程式就得加以考慮。
一些如Java這樣的語言,從一開始就意識到要在各個平台下運行,所以跨平台在其平台的本地語言環境中已經實現。例如,Java可以跨平台使用,正是由於Swing庫在許多平台下的實現。類似的,能進行跨平台的文件存取,是因為有各自平台下文件存取的庫。以此類推,各種跨平台問題,都需要各自的本地庫來解決。wxWidgets框架就是這樣的一個跨平台庫,根據不同的跨平台問題,提供了許多不同的解決方案;類似的庫有許多,可以根據不同語言的跨平台開發,而採用相應的庫。
針對每種作業系統、CPU,而提供並測試各自的編譯版本,這種做法的可行性很小;開源軟體則允許用戶自己來編譯目的碼(object code),這樣在跨平台方面更好一些。類似的,那些解釋型語言,或者需要虛擬機的語言,也更加符合跨平台的要求,因為用戶也要自己進行編譯。Sun公司的Java虛擬機Hotspot,只針對幾種而不是全部平台,提供編譯好的二進位文件。例如,Sun對於GNU/linux,只支持i386平台,但如果誰在PowerPC或者SPARC電腦上運行Linux,就只好自己編譯本地的機器碼(machinecode),或者使用第三方軟體,才能運行Java程式。
許多API(應用程式介面)依賴於平台。OpenGL可以看作是跨平台的,因為其不依賴於任何特定的作業系統、CPU構架或者某個牌子的圖形設備。特定平台的API可以在其他系統上作為兼容層而新建,例如WINE的庫,Windows程式就可以在UNIX系統上運行。
另外許多程式語言還有跨平台的擴展以及中間件,這樣程式設計師對於同樣的原始碼,只要進行一點小修改,就可以在不同平台下編譯/運行,例如Qt和wxWidgets。
支持多種作業系統的軟體
1. 資料庫管理系統(DBMS):
MySQL:Solaris、Linux、Windows、FreeBSD
Oracle:Solaris、Linux、Windows
2. 網站伺服器、應用程式伺服器:
Apache:Solaris、Linux、Windows、FreeBSD
Tomcat:Linux、Windows、FreeBSD
3. 網際網路瀏覽器:
Mozilla Firefox:Linux、FreeBSD、Solaris、AIX、Windows、
可在不同作業系統上進行軟體開發的程式語言
C語言、C++、Java
Perl、Tcl、Erlang
Python、Delphi+Kylix、REALbasic
開發java應用的跨平台,包含五方面的內容:
一、跨應用伺服器
二、跨資料庫
三、跨操作系統
四、跨瀏覽器
五、多語言支持
下面分別來說一下。
■跨應用伺服器
這一點,看起來好像有些多餘,java的口號之一不就是「一次編譯,到外運行」嘛,可實際經驗告訴我們,這僅僅是一個口號而已。實際中是「一次編譯,到處調試」。為什麼會這樣?從應用伺服器來說,各個產品或多或少都在標準的java規范之上進行了一些拓展,小規模的應用開發,多以tomcat為基準;大規模的應用,多以weblogic/websphere為基準。
那麼開發完成的應用,可否在所有的應用伺服器上正常部署呢?答案是否定的。在tomcat5上部署沒問題,在tomcat4上卻可能有問題;在tomcat5/4上沒問題,卻可能在resin/jetty/weblogic/websphere上有問題。在我的經歷中,在resin/jetty/weblogic為基準進行開發的應用,部署到tomcat上基本上沒什麼問題。但是以tomcat為基準的應用,部署到其他應用伺服器中,卻可能出現各種各樣的問題。這與tomcat本身的定位和開發方式有關,它更像是一個學術產品,而不是一個商業產品。
小型的應用,我偏好resin,它的速度、穩定性、兼容性、中文處理,都是非常不錯的。相比而言,以「純java、快速」著稱的jetty,就不太令人滿意。jetty的4/5/6各個版本中,對session的存放位置、web.xml的標准、struts的plugin的支持、log4j的處理,都各不相同。在最新的jetty6中,竟然會要命地「不能使用session.validate()」方法,一使用此方法之後,就無法再使用set/getAttribute了。
也曾經在將一個應用轉移到websphere5上時,費勁周折。這個應用跑在其他應用伺服器上都沒問題,但是一部署到ws5上,就無法正常載入struts的配置文件。本以為是struts配置文件寫得有問題,但即便把所有的action/form配置均去掉,只保留一個空的配置文件,也無法正常啟動。最後實在無法,只能亂碰運氣,考慮是否是struts的幾個jar包版本有問題,經檢查,發現應用中使用的是struts1.2的jar包,換成struts1.1的jar包,再啟動後就一切正常。這樣的問題,可真的是折磨人呢。
所以,我認為跨應用伺服器是很重要的。你不能告訴客戶,俺們的系統只能跑在tomcat下面,至於您花重金購買的weblogic/websphere,對不起,我們暫時還不支持。客戶會吐血的。
■跨資料庫
經常看到某大公司產品,要求必須使用oracle或者sqlserver資料庫,你想換個資料庫來部署?沒門,人家說了,我們的產品只支持這一種資料庫,你就老實的用吧。但對於客戶方來說,為了減少投資,並且保證內部系統盡可能使用同一種資料庫以減少維護成本(總不能請一個oracle DBA,再請一個sqlserver DBA吧?),總會希望新系統使用的資料庫是以前用過的吧。
現在有了hibernate,在此基礎上開發的應用,基本上是能滿足跨資料庫要求的,個人認為這是hibernate最大的亮點。但也要注意,在開發中盡可能考慮到不同資料庫的特性。諸如sqlserver的text/image欄位上不能查distinct,oracle內的各種對象名稱長度不得超過30等,盡量不要調用資料庫的內部特性(如存儲過程、視圖等)
■跨操作系統
這一點,貌似沒有什麼可說的,很少有開發出的系統只能部署在一種操作系統上的。不過有一點也要注意,如果系統中某些功能依賴於通過JNI來調用windows本地組件的話,比如列印、word/excel操作,或與只能運行在windows下的報表組件(如國內的數巨報表、如意報表)集成的話。
■跨瀏覽器
竊以為,如果只是做國內的應用,這一點倒不重要,就以IE為標准來開發也未嘗不可。
PS:完全支持IE也不是一件容易的事情,IE5/6本身就有不少的差異。
但如果產品本身想立足於世界,想與國外產品競爭,對瀏覽器的全面支持也必不可少。至少應該同時支持ie和firefox吧,如果對自身嚴格要求的話,我認為應以opera為標准,opera對html/css/javascript的標準是實現和支持得最好的瀏覽器。
■多語言支持
如果您的產品只想在中國賣,根本就不考慮世界市場,那這一條就pass好了。
Java程序跨平台需要注意什麼
使用Java語言編寫應用程序最大的優點在於「一次編譯,處處運行」,然而這並不是說所有的Java程序都具有跨平台的特性,事實上,相當一部分的Java程序是不能在別的操作系統上正確運行的,那麼如何才能編寫一個真正的跨平台的Java程序呢?下面是在編寫跨平台的Java程序是需要注意的一些事情:
1.編寫Java跨平台應用程序時,你可以選擇JDK1.0,1.1,1.2或支持它們的GUI開發工具如:Jbuilder,VisualAgeforJava等等,但是必須注意你的Java程序只能使用Java核心API包,如果要使用第三方的類庫包,則該類庫包也要由Java核心包開發完成,否則在發布你的程序的時候還得將支持該Java類庫包的JVM發布出去。也就是說,你的程序需要是100%純Java的。舉一個例子,VisualJ++就不是純Java的,由VisualJ++編寫的程序也就不具有平台無關性。
2.無論你使用的是JDK或其他開發工具,在編譯時都要打開所有的警告選項,這樣編譯器可以盡可能多的發現平台相關的語句,並給出警告。雖然不能保證沒有編譯時警告錯誤的程序一定是跨平台的,但含有警告錯誤的程序卻很有可能是非平台無關的。
3.在程序中使用任何一個方法的時候,要詳細察看文檔,確保你使用的方法不是在文檔中已經申明為過時的方法(Deprecatedmethod),也不是文檔中未標明的隱含方法(Undocumentedmethod)。
4.退出Java程序時盡量不要使用java.lang.System的exit方法。Exit方法可以終止JVM,從而終止程序,但如果同時運行了另一個Java程序,使用exit方法就會讓該程序也關閉,這顯然不是我們希望看到的情況。事實上要退出Java程序,可以使用destory()退出一個獨立運行的過程。對於多線程程序,必須要關閉各個非守護線程。只有在程序非正常退出時,才使用exit方法退出程序。
5.避免使用本地方法和本地代碼,盡可能自己編寫具有相應功能的Java類,改寫該方法。如果一定要使用該本地方法,可以編寫一個伺服器程序調用該方法,然後將現在要編寫的程序作為該伺服器程序的客戶程序,或者考慮CORBA(公共對象請求代理)程序結構。
6.Java中有一個類似於Delphi中的winexec的方法,java.lang.runtime類的exec方法,作為該方法本身是具有平台無關性的,但是給方法所調用的命令及命令參數卻是與平台相關的,因此,在編寫程序時要避免使用,如果一定要調用其他的程序的話,必須要讓用戶自己來設置該命令及其參數。比如說,在windows中可以調用notepad.exe程序,在linux中就要調用vi程序了。
7.程序設計中的所有的信息都要使用ASCII碼字元集,因為並不是所有的操作系統都支持Unicode字元集,這對於跨平台的Java中文軟體程序不能不說是一大噩耗。
8.在程序中不要硬性編碼與平台相關的任何常量,比如行分隔符,文件分隔符,路徑分隔符等等,這些常量在不同的平台上是不同的,比如文件分隔符,在UNIX和MAC中是「/」,在windows中是「\」,如果要使用這些常量,需要使用jdava.util.Properties類的getProperty方法,如java.util.Properties.getProperty(「file.separator」)可以獲得文件分隔符,getProperty(「line.separator」)返回行分隔符,getProperty(「path.separator」)返迴路徑分隔符。
9.在編寫跨平台的網路程序時,不要使用java.net.InetAddress類的getHostName方法得到主機名,因為不同的平台的主機名格式是不同的,最好使用getAddress得到格式相同的IP地址,另外,程序中所有的主機名都要換成IP地址,比如www.263.net就要換成相應的IP地址。
10.涉及文件操作的程序需要注意:不要在程序中硬性編碼文件路徑,理由和8中一樣,只是這一點特別重要,因此單獨提出。而且,不同平台對於文件名使用的字元及最大文件名長度的要求不同,編寫你的程序的時候要使用一般的ASCII碼字元作為文件的名字,而且不能與平台中已存在的程序同名,否則會造成沖突。
11.如果您寫的程序是GUI程序,在使用AWT組件時不能硬性設置組件的大小和位置而應該使用Java的布局管理器(layoutmanager)來設置和管理可視組件的大小和位置,否則有可能造成布局混亂。
12.由於不同的操作系統,不同的機器,系統支持的顏色和屏幕的大小和解析度都不同,如何獲得這些屬性呢?使用java.awt.Systemcolor類可以獲得需要的顏色,如該類的inactiveCaption就是窗口邊框中活動標題的背景顏色,menu則是菜單的背景顏色。使用java.awt.Toolkit的getScreenResolution可以以「象素每英寸」為單位顯示屏幕的解析度。該類的getScreenSize可以得到屏幕大小(英寸),loadSystemColors可以列出所有的系統顏色。