java風格
① java的優勢
JAVA的優勢?
我來給你說一下Java的優勢:
1.java的風格類似C++但不同於C++,從某種意義上講,java是C++的一個變種;
2.java摒棄了C、C++中的容易引發錯誤和難以理解的指針,結構,以及內存管理等;
3.java提供了豐富的類庫,很方便開發程序;
4.java是完全面向對象的語言,支持 繼承,重載,多態等面向對象的特性;
5.C++是面向對象和面向過程的混合語言, C是純面向過程的語言;
6.java是一種強類型的語言,比C/C++檢查還要嚴格,java區分大小寫字母;
7.java提供了自動垃圾回收機制gc,有效避免了C、C++的內存泄漏問題;
8.java禁止非法訪問內存,因為java沒有指針,內存的申請和釋放;
9.跨平台,java的源代碼編譯成結構中立的中間格式,這種格式與機器無關,只要在安裝有JVM(java虛擬機)的電腦上,都能運行這種與機器無關的中間文件;java一次編譯,到處運行;
10.對於不同的操作系統,會有不同的java虛擬機,這也就決定了java的可移植性;
11.java支持多線程,簡單理解,如果是單核CPU,那麼會通過時間片輪轉的方式,多線程執行程序,如果是多核CPU,那麼就可以理解為,兩個或多個線程同時運行。
web開發:
能做大型的互聯網網站如,京東,淘寶,人人網、去哪兒網、美團等。
java在開發高訪問、高並發、集群化的大型網站方面有很大的優勢。
移動端開發:
目前手機上所有的APP後台代碼及部分移動端頁面java是都能夠做到的。
客戶端開發:
主要面向政府、事業單位和大型企業,如醫療、學校、OA、郵箱、投票、金融、考試、物流、礦山等信息方面的系統。這些應用在我們生活中其實隨處可見,比如醫院的掛號系統、公司的打卡系統、物流系統等。
說啦這么多那麼應該如何學習Java那?
在這個里我使用腦圖給大家出一個,Java的學習線路供大家參考:
評論領取歐!!!!!!!!
Java在市場中的佔有率是非常之高的,希望大都成為優秀的程序員!!!
② 其 實 J A V A 是 什 么
Java,是一種可以編寫跨平台應用軟體的物件導向的程式語言,由升陽(太陽微電子,Sun Microsystems)公司的詹姆斯·高斯林(James Gosling)等人於1990年代初開發。它最初被命名為Oak,作為一種小家用電器的編程語言,用於解決諸如電視機、電話、鬧鍾、烤麵包機等家用電器的控制和通訊問題。由於這些智能化家電的市場需求沒有預期的高,Sun放棄了該項計劃。就在Oak幾近夭折之時,隨著Inter的發展,Sun看到了Oak在電腦網路上的廣闊應用前景,於是改造了Oak,在1995年5月以"Java"的名稱正式發布了。Java伴隨著Inter的迅猛發展而發展,逐漸成為重要的Inter程式語言。 Java程式語言的風格十分接近C++語言。Java繼承了C++語言物件導向技術的核心,舍棄了C++語言中容易引起錯誤的指針(以引用取代)、運算符重載、多重繼承(以介面取代)等成分,增加了自動垃圾收集功能用於回收不再被引用的對象所佔據的記憶體空間。在J2SE1.5版本中Java又引入了泛型編程、類型安全的枚舉、不定長參數和自動裝/拆箱等語言特性。 Java不同於一般的編輯執行計算機語言和解釋執行電腦語言。它首先將原始碼編譯成位元組碼,然後依賴各種不同平台上的虛擬機來解釋執行位元組碼,從而實現了「一次編譯、到處執行」的跨平台特性。不過,這同時也在一定程度上降低了Java程序的運行效率。但在J2SE1.4.2發布後,Java的計算能力有了大幅提升。 與傳統程序不同,Sun公司在推出Java之虧型際就將其作為一種開放的技術。全球數以萬計的Java開發公司被要求所設計的Java軟體必須相互相容。「Java語言靠群體的力量而非公司的力量」是Sun公司的口號之一,並獲得了廣大軟體開發商的認同。這與微軟公司所倡導的注重精英和封閉式的模式完全不同。 Sun公司對Java程式語言的解釋是:Java程式語言是個簡單、物件導向、分散式、解釋性、健壯、安全與系統無關、可移植、高性能、多執行緒和動態的語言。 Java平台是基於Java語言的平台。這樣的平台目前非常流行,因此微軟公司推出了與之競爭的.NET平台以及模仿Java的C#語言。 Java名稱的由來 在正式推出Java,升陽公司的工作人員正為了為這種新的程式語言取一個名稱而苦惱。當時,這些軟體工程師坐在充溢著香味的升陽公司總部一起邊喝著爪哇咖啡一邊思考。最後,大家一致同意以這種飄香的咖啡名字Java來命名這個新生的語言和技術。 早期的JAVA Oak語言的吉祥物,DukeJava平台和語言最開始只是升陽公司在1990年12開始研究的一個內部項目。升陽公司的一個叫做派屈克·諾頓的工程師被升陽自己開發的C++和C語言編譯器搞得焦頭爛額,因為其中的API極其難用。派屈克決定改用NeXT,同時他也獲得了研究公司的一個叫做「Stealth 計劃」的項目的機會。 「Stealth 計劃」後來改名為「Green計劃」,詹姆斯·高斯林和麥克·舍林丹也加入了派屈克的工作小組。他們和其他幾個工程師一起在加利福尼亞州門羅帕克市沙丘路的一個小工作室裡面研究開發新技術,瞄準下一代智能家電(如微波爐)的程序設計,升陽公司預料未來科技將在家用電器領域大顯身手。團隊最初考慮使用C++語言,但是很多成員包括升陽的首席科學家比爾·喬伊,發現C++和可用的API在某些方面存在很大問題。 工作小組使用的是內嵌類型平台,可以用梁薯的資源極其有限。很多成員發現C++太復雜以至很多開發者經常錯誤使用。他們發現C++缺少垃圾回收系統,還有可移植的安全性、分布程序設計、和多執行緒功能。最後,他們想要一種易於移植到各種設備上的平台。 根據可用的資金,比爾·喬伊決定開發一種集C語言和Mesa語言大成的新語言,在一份報告上,喬伊把它叫做「未來」,他銷渣猜提議升陽公司的工程師應該在C++的基礎上,開發一種物件導向的環境。最初,高斯林試圖修改和擴展C++的功能,他自己稱這種新語言為 C++ ++ --,但是後來他放棄了。他將要創造出一種全新的語言,被他命名為「Oak」(橡樹)
以他的辦公室外的樹而命名。 就像很多開發新技術的秘密的工程一樣,工作小組沒日沒夜地工作到了1992年的夏天,他們能夠演示新平台的一部分了,包括Green作業系統,Oak的程式語言,類庫,和其硬體。最初的嘗試是面向一種類PDA設備,被命名為Star7,這種設備有鮮艷的圖形界面和被稱為「Duke」的智能代理來幫助用戶。1992年12月3日,這台設備進行了展示。 同年11月,Green計劃被轉化成了「FirstPerson有限公司」,一個升陽公司的全資子公司,團隊也被重新安排到了帕洛阿爾托。FirstPerson團隊對建造一種高度互動的設備感興趣,當時代華納發布了一個關於電視機頂盒的徵求提議書時(Request for proposal),FirstPerson改變了他們的目標,作為對徵求意見書的響應, 提出了一個機頂盒平台的提議。但是有線電視業界覺得FirstPerson的平台給予用戶過多地控制權,因此FirstPerson的投標敗給了SGI。與3DO 公司的另外一筆關於機頂盒的交易也沒有成功,由於他們的平台不能在電視工業產生任何效益,公司再並回升陽公司。 JAVA遭遇互聯網 1994年6、7月間,在經歷了一場歷時三天的頭腦風暴的討論後,約翰·蓋吉、詹姆斯·高斯林、比爾·喬伊、派屈克·諾頓、韋恩·羅斯因和埃里克·斯庫米,團隊決定再一次改變了努力的目標,這次他們決定將該技術應用於全球資訊網。他們認為隨著Mosaic瀏覽器的到來,互聯網正在向同樣的高度互動的遠景演變,而這一遠景正是他們在有線電視網中看到的。作為原型,派屈克·諾頓寫了一個小型全球資訊網瀏覽器,WebRunner,後來改名為HotJava。 同年,Oak改名為Java。商標搜索顯示,Oak已被一家顯示卡製造商注冊,因此團隊找到了一個新名字。這個名字是在很多成員常去的本地咖啡館中杜撰出來的。名字是不是首字母縮寫還不清楚, 很大程度上來說不是。 雖然有人聲稱是開發人員名字的組合:James Gosling(詹姆斯·高斯林)+Arthur Van Hoff(阿瑟·凡·霍夫)+Andy Bechtolsheim(安迪·貝克托克姆),或「Just Another Vague Acronym」(只是另外一個含糊的縮寫)。還有一種比較可信的說法是這個名字是出於對咖啡的喜愛,所以以java咖啡來命名。類文件的前四個位元組如果用十六進位閱讀的話,分別為CA FE BA BE
就會拼出兩個單詞「CAFE BABE」(咖啡寶貝)。 1994年10月,HotJava和Java平台為公司高層進行演示。1994年, Java 1.0a版本已經可以提供下載,但是Java和HotJava瀏覽器的第一次公開發布卻是在1995年3月23日SunWorld大會上進行的。升陽公司的科學指導約翰·蓋吉宣告Java技術。這個發布是與網景公司的執行副總裁馬克·安德森的驚人發布一起進行的, 宣布網景將在其瀏覽器中包含對Java的支持。1996年1月,升陽公司成立了Java業務集團,專門開發Java技術。 JAVA近況 在流行幾年之後,Java在瀏覽器中的地位被逐步侵蝕。它在簡單交互性動畫方面的用途已經完全被Macromedia公司的Flash排擠,2005年Java傾向只被用於雅虎游戲那樣的更為復雜的應用程序。Java同時遭受到來自微軟的反對,他們決定在新版本的Inter Explorer和Windows中不再附帶Java平台。 與此相反。在全球資訊網的服務端和手持設備上,Java變得更加流行。很多網站在前端使用JSP和其他的Java技術。 在桌面系統上,的Java程序還是相對少見,這是因為Java平台的運行開銷較大,而許多人的電腦上沒有安裝Java,由於網路頻寬在以前較小,下載Java曾經是個耗時的事情。但是隨著電腦計算能力、網路頻寬在10年中取得了很大的進步,同時虛擬機和編譯器的質量得到了越高,許多應用程序得到了廣泛的使用, 包括: zh. *** . /wiki/JAVA 2007-11-10 21:22:21 補充: zh. *** /w/index?title=Java&variant=zh-錯了
Java,是一種可以編寫跨平台應用軟體的物件導向的程式語言,由升陽(太陽微電子,Sun Microsystems)公司的詹姆斯·高斯林(James Gosling)等人於1990年代初開發。它最初被命名為Oak,作為一種小家用電器的編程語言,用於解決諸如電視機、電話、鬧鍾、烤麵包機等家用電器的控制和通訊問題。由於這些智能化家電的市場需求沒有預期的高,Sun放棄了該項計劃。就在Oak幾近夭折之時,隨著Inter的發展,Sun看到了Oak在電腦網路上的廣闊應用前景,於是改造了Oak,在1995年5月以"Java"的名稱正式發布了。Java伴隨著Inter的迅猛發展而發展,逐漸成為重要的Inter程式語言。 Java程式語言的風格十分接近C++語言。Java繼承了C++語言物件導向技術的核心,舍棄了C++語言中容易引起錯誤的指針(以引用取代)、運算符重載、多重繼承(以介面取代)等成分,增加了自動垃圾收集功能用於回收不再被引用的對象所佔據的記憶體空間。在J2SE1.5版本中Java又引入了泛型編程、類型安全的枚舉、不定長參數和自動裝/拆箱等語言特性。 Java不同於一般的編輯執行計算機語言和解釋執行電腦語言。它首先將原始碼編譯成位元組碼,然後依賴各種不同平台上的虛擬機來解釋執行位元組碼,從而實現了「一次編譯、到處執行」的跨平台特性。不過,這同時也在一定程度上降低了Java程序的運行效率。但在J2SE1.4.2發布後,Java的計算能力有了大幅提升。 與傳統程序不同,Sun公司在推出Java之際就將其作為一種開放的技術。全球數以萬計的Java開發公司被要求所設計的Java軟體必須相互相容。「Java語言靠群體的力量而非公司的力量」是Sun公司的口號之一,並獲得了廣大軟體開發商的認同。這與微軟公司所倡導的注重精英和封閉式的模式完全不同。 Sun公司對Java程式語言的解釋是:Java程式語言是個簡單、物件導向、分散式、解釋性、健壯、安全與系統無關、可移植、高性能、多執行緒和動態的語言。 Java平台是基於Java語言的平台。這樣的平台目前非常流行,因此微軟公司推出了與之競爭的.NET平台以及模仿Java的C#語言。 Java名稱的由來 在正式推出Java,升陽公司的工作人員正為了為這種新的程式語言取一個名稱而苦惱。當時,這些軟體工程師坐在充溢著香味的升陽公司總部一起邊喝著爪哇咖啡一邊思考。最後,大家一致同意以這種飄香的咖啡名字Java來命名這個新生的語言和技術。 早期的JAVA Oak語言的吉祥物,DukeJava平台和語言最開始只是升陽公司在1990年12開始研究的一個內部項目。升陽公司的一個叫做派屈克·諾頓的工程師被升陽自己開發的C++和C語言編譯器搞得焦頭爛額,因為其中的API極其難用。派屈克決定改用NeXT,同時他也獲得了研究公司的一個叫做「Stealth 計劃」的項目的機會。 「Stealth 計劃」後來改名為「Green計劃」,詹姆斯·高斯林和麥克·舍林丹也加入了派屈克的工作小組。他們和其他幾個工程師一起在加利福尼亞州門羅帕克市沙丘路的一個小工作室裡面研究開發新技術,瞄準下一代智能家電(如微波爐)的程序設計,升陽公司預料未來科技將在家用電器領域大顯身手。團隊最初考慮使用C++語言,但是很多成員包括升陽的首席科學家比爾·喬伊,發現C++和可用的API在某些方面存在很大問題。 工作小組使用的是內嵌類型平台,可以用的資源極其有限。很多成員發現C++太復雜以至很多開發者經常錯誤使用。他們發現C++缺少垃圾回收系統,還有可移植的安全性、分布程序設計、和多執行緒功能。最後,他們想要一種易於移植到各種設備上的平台。 根據可用的資金,比爾·喬伊決定開發一種集C語言和Mesa語言大成的新語言,在一份報告上,喬伊把它叫做「未來」,他提議升陽公司的工程師應該在C++的基礎上,開發一種物件導向的環境。最初,高斯林試圖修改和擴展C++的功能,他自己稱這種新語言為 C++ ++ --,但是後來他放棄了。他將要創造出一種全新的語言,被他命名為「Oak」(橡樹)
以他的辦公室外的樹而命名。 就像很多開發新技術的秘密的工程一樣,工作小組沒日沒夜地工作到了1992年的夏天,他們能夠演示新平台的一部分了,包括Green作業系統,Oak的程式語言,類庫,和其硬體。最初的嘗試是面向一種類PDA設備,被命名為Star7,這種設備有鮮艷的圖形界面和被稱為「Duke」的智能代理來幫助用戶。1992年12月3日,這台設備進行了展示。 同年11月,Green計劃被轉化成了「FirstPerson有限公司」,一個升陽公司的全資子公司,團隊也被重新安排到了帕洛阿爾托。FirstPerson團隊對建造一種高度互動的設備感興趣,當時代華納發布了一個關於電視機頂盒的徵求提議書時(Request for proposal),FirstPerson改變了他們的目標,作為對徵求意見書的響應, 提出了一個機頂盒平台的提議。但是有線電視業界覺得FirstPerson的平台給予用戶過多地控制權,因此FirstPerson的投標敗給了SGI。與3DO 公司的另外一筆關於機頂盒的交易也沒有成功,由於他們的平台不能在電視工業產生任何效益,公司再並回升陽公司。 JAVA遭遇互聯網 1994年6、7月間,在經歷了一場歷時三天的頭腦風暴的討論後,約翰·蓋吉、詹姆斯·高斯林、比爾·喬伊、派屈克·諾頓、韋恩·羅斯因和埃里克·斯庫米,團隊決定再一次改變了努力的目標,這次他們決定將該技術應用於全球資訊網。他們認為隨著Mosaic瀏覽器的到來,互聯網正在向同樣的高度互動的遠景演變,而這一遠景正是他們在有線電視網中看到的。作為原型,派屈克·諾頓寫了一個小型全球資訊網瀏覽器,WebRunner,後來改名為HotJava。 同年,Oak改名為Java。商標搜索顯示,Oak已被一家顯示卡製造商注冊,因此團隊找到了一個新名字。這個名字是在很多成員常去的本地咖啡館中杜撰出來的。名字是不是首字母縮寫還不清楚, 很大程度上來說不是。 雖然有人聲稱是開發人員名字的組合:James Gosling(詹姆斯·高斯林)+Arthur Van Hoff(阿瑟·凡·霍夫)+Andy Bechtolsheim(安迪·貝克托克姆),或「Just Another Vague Acronym」(只是另外一個含糊的縮寫)。還有一種比較可信的說法是這個名字是出於對咖啡的喜愛,所以以java咖啡來命名。類文件的前四個位元組如果用十六進位閱讀的話,分別為CA FE BA BE
就會拼出兩個單詞「CAFE BABE」(咖啡寶貝)。 1994年10月,HotJava和Java平台為公司高層進行演示。1994年, Java 1.0a版本已經可以提供下載,但是Java和HotJava瀏覽器的第一次公開發布卻是在1995年3月23日SunWorld大會上進行的。升陽公司的科學指導約翰·蓋吉宣告Java技術。這個發布是與網景公司的執行副總裁馬克·安德森的驚人發布一起進行的, 宣布網景將在其瀏覽器中包含對Java的支持。1996年1月,升陽公司成立了Java業務集團,專門開發Java技術。 JAVA近況 在流行幾年之後,Java在瀏覽器中的地位被逐步侵蝕。它在簡單交互性動畫方面的用途已經完全被Macromedia公司的Flash排擠,2005年Java傾向只被用於雅虎游戲那樣的更為復雜的應用程序。Java同時遭受到來自微軟的反對,他們決定在新版本的Inter Explorer和Windows中不再附帶Java平台。 與此相反。在全球資訊網的服務端和手持設備上,Java變得更加流行。很多網站在前端使用JSP和其他的Java技術。 在桌面系統上,的Java程序還是相對少見,這是因為Java平台的運行開銷較大,而許多人的電腦上沒有安裝Java,由於網路頻寬在以前較小,下載Java曾經是個耗時的事情。但是隨著電腦計算能力、網路頻寬在10年中取得了很大的進步,同時虛擬機和編譯器的質量得到了越高,許多應用程序得到了廣泛的使用
由於你開過一些網頁,網頁內容需要用到 java applet,所以啟動了這個 java client。 其實這個 client 是長駐的,平時即使看不見它的 icon,但它仍然是在運作中,所以個 icon 可以不理。 較新版的 client 可以選擇隱藏,但如果隱藏不到的話,也沒辦法,reboot 後它就會回復隱藏。
③ 使用Java實現Comet風格的Web應用(一)
開始
在本文中 我將展示如何使用各種不同的 Java 技術構建一些簡單的 Comet 風格的 Web 應用程序 讀者對 Java Servlet Ajax 和 JavaScript 應該有一定的了解 我們將考察 Tomcat 和 Jetty 中一些支持 Comet 的特性 因此需要使用這兩個產品的最新版本 本文使用 Tomcat 和 Jetty 另外還需要一個支持 Java 或更高版本的 JDK 本文使用 JDK 此外還需要看看 Jetty 的預發布版 因為它實現了 Servlet 規范 我們將在本文中研究該規范
理解 Comet
您可能已經聽說過 Comet 因為它最近受到了一定的關注 Comet 有時也稱反向 Ajax 或伺服器端推技術(server side push) 其思想很簡單 將數據直接從伺服器推到瀏覽器 而不必等到瀏覽器請求數據 聽起來簡單 但是如果熟悉 Web 應用程序 尤其是 HTTP 協議 那麼您就會知道 這絕不簡單 實現 Comet 風格的 Web 應用程序 同時保證在瀏覽器和伺服器上的可伸縮性 這只是在最近幾年才成為可能 在本文的後面 我們將看看一些流行的 Java Web 伺服器如何支持可伸縮的 Comet 架構 但首先我們來看看為什麼要創建 Comet 應用程序 以及用於實現它們的常見設計模式
使用 Comet 的動機
HTTP 協議的成功毋庸置疑 它是 Internet 上大部分信息交換的基礎 然而 它也有一些局限性 特別是 它是無狀態 單向的協議 請求被發送到 Web 伺服器 伺服器處理請求並發回一個響應 — 僅此而已 請求必須由客戶機發出 而伺服器則只能在對請求的響應中發送數據 這至少會影響很多類型的 Web 應用程序的實用性 典型的例子就是聊天程序 另外還有一些例子 例如比賽的比分 股票行情或電子郵件程序
HTTP 的這些局限性也是它取得一定成功的原因 請求/響應周期使它成為了經典的模型 即每個連接使用一個線程 只要能夠快速為請求提供服務 這種方法就有巨大的可伸縮性 每秒鍾可以處理大量的請求 只需使用少量的伺服器就可以處理很大數量的用戶 對於很多經典的 Web 應用程序 例如內容管理系統 搜索應用程序和電子商務站點等等而言 這非常適合 在以上任何一種 Web 應用程序中 伺服器提供用戶請求的數據 然後關閉連接 並釋放那個線程 使之可以為其他請求服務 如果提供初始數據之後仍可能存在交互 那麼將連接保持為打開狀態 因此線程就不能釋放出來 伺服器也就不能為很多用戶服務
但是 如果想在對請求做出響應並發送初始數據之後 仍然保持與用戶的交互呢?在 Web 早期 這一點常使用 meta 刷新實現 這將自動指示瀏覽器在指定秒數之後重新裝載頁面 從而支持簡陋的輪詢(polling) 這不僅是一種糟糕的用戶體驗 而且通常效率非常低下 如果沒有新的數據要顯示在頁面上呢?這時不得不重新呈現同樣的頁面 如果對頁面的更改很少 並且頁面的大部分沒有變化呢?同樣 不管是否有必要 都得重新請求和獲取頁面上的一切內容
Ajax 的發明和流行改變了上述狀況 現在 伺服器可以非同步通信 因此不必重新請求整個頁面 現在可以進行增量式的更新 只需使用 XMLHttpRequest 輪詢伺服器 這項技術通常被稱作 Comet 這項技術存在一些變體 每種變體具有不同的性能和可伸縮性 我們來看看這些不同風格的 Comet
Comet 風格
Ajax 的出現使 Comet 成為可能 HTTP 的單向性質可以有效地加以規避 實際上有一些不同的方法可以繞過這一點 您可能已經猜到 支持 Comet 的最容易的方式是輪詢(poll) 使用 XMLHttpRequest 向伺服器發出調用 返回後 等待一段固定的時間(通常使用 JavaScript 的 setTimeout 函數) 然後再次調用 這是一項非常常見的技術 例如 大多數 webmail 應用程序就是通過這種技術在電子郵件到達時顯示電子郵件的
這項技術有優點也有缺點 在這種情況下 您期望快速返回響應 就像任何其他 Ajax 請求一樣 在請求之間必須有一段暫停 否則 連續不斷的請求會沖垮伺服器 並且這種情況下顯然不具有可伸縮性 這段暫停使應用程序產生一個延時 暫停的時間越長 伺服器上的新數據就需要越多的時間才能到達客戶機 如果縮短暫停時間 又將重新面臨沖垮伺服器的風險 但是另一方面 這顯然是最簡單的實現 Comet 的方式
現在應該指出 很多人認為輪詢並不屬於 Comet 相反 他們認為 Comet 是對輪詢的局限性的一個解決方案 最常見的 真正的 Comet 技術是輪詢的一種變體 即長輪詢(long polling) 輪詢與長輪詢之間的主要區別在於伺服器花多長的時間作出響應 長輪詢通常將連接保持一段較長的時間 — 通常是數秒鍾 但是也可能是一分鍾甚至更長 當伺服器上發生某個事件時 響應被發送並隨即關閉 輪詢立即重新開始
長輪詢相對於一般輪詢的優點在於 數據一旦可用 便立即從伺服器發送到客戶機 請求可能等待較長的時間 期間沒有任何數據返回 但是一旦有了新的數據 它將立即被發送到客戶機 因此沒有延時 如果您使用過基於 Web 的聊天程序 或者聲稱 實時 的任何程序 那麼它很可能就是使用了這種技術
長輪詢有一種變體 這是第三種風格的 Comet 這通常被稱為流(streaming) 按照這種風格 伺服器將數據推回客戶機 但是不關閉連接 連接將一直保持開啟 直到過期 並導致重新發出請求 XMLHttpRequest 規范表明 可以檢查 readyState 的值是否為 或 Receiving(而不是 或 Loaded) 並獲取正從伺服器 流出 的數據 和長輪詢一樣 這種方式也沒有延時 當伺服器上的數據就緒時 該數據被發送到客戶機 這種方式的另一個優點是可以大大減少發送到伺服器的請求 從而避免了與設置伺服器連接相關的開銷和延時 不幸的是 XMLHttpRequest 在不同的瀏覽器中有很多不同的實現 這項技術只能在較新版本的 Mozilla Firefox 中可靠地使用 對於 Internet Explorer 或 Safari 仍需使用長輪詢
至此 您可能會想 長輪詢和流都有一個很大的問題 請求需要在伺服器上存在一段較長的時間 這打破了每個請求使用一個線程的模型 因為用於一個請求的線程一直沒有被釋放 更糟糕的是 除非要發回數據 否則該線程一直處於空閑狀態 這顯然不具有可伸縮性 幸運的是 現代 Java Web 伺服器有很多方式可以解決這個問題
Java 中的 Comet
現在有很多 Web 伺服器是用 Java 構建的 一個原因是 Java 有一個豐富的本地線程模型 因此實現典型的每個連接一個線程的模型便非常簡單 該模型對於 Comet 不大適用 但是 Java 對此同樣有解決的辦法 為了有效地處理 Comet 需要非阻塞 IO Java 通過它的 NIO 庫提供非阻塞 IO 兩種最流行的開源伺服器 Apache Tomcat 和 Jetty 都利用 NIO 增加非阻塞 IO 從而支持 Comet 然而 這兩種伺服器中的實現卻各不相同 我們來看看 Tomcat 和 Jetty 對 Comet 的支持
Tomcat 和 Comet
對於 Apache Tomcat 要使用 Comet 主要需要做兩件事 首先 需要對 Tomcat 的配置文件 server XML 稍作修改 默認情況下啟用的是更典型的同步 IO 連接器 現在只需將它切換成非同步版本 如清單 所示
清單 修改 Tomcat 的 server xml <! ThisistheusualConnector mentitoutandaddtheNIOone ><! ConnectorURIEncoding= utf connectionTimeout= port= protocol= HTTP/ redirectPort= / ><ConnectorconnectionTimeout= port= protocol= apache coyote redirectPort= />
Servlet 這顯然是 Tomcat 特有的一個介面 清單 顯示了一個這樣的例子
lishixin/Article/program/Java/hx/201311/26770