iPhone學(xué)習(xí)之路 基于HTTP長連接Server PUSH
iPhone學(xué)習(xí)之路 基于HTTP長連接Server PUSH是本文要介紹的內(nèi)容,本文主要是圍繞長連接Server PUSH介紹,不多說,我們來看內(nèi)容。
服務(wù)器推實現(xiàn)的相關(guān)資料
有個不錯的文章《Comet:基于 HTTP 長連接的“服務(wù)器推”技術(shù)》。文章提到Comet現(xiàn)實應(yīng)用的需求:
監(jiān)控系統(tǒng):后臺硬件熱插拔、LED、溫度、電壓發(fā)生變化;
即時通信系統(tǒng):其它用戶登錄、發(fā)送信息;
即時報價系統(tǒng):后臺數(shù)據(jù)庫內(nèi)容發(fā)生變化;
也提到多種技術(shù)實現(xiàn)服務(wù)器推送。
我現(xiàn)在比較同意這個,介紹了選擇要注意的事項,比如服務(wù)器對long-polling的支持?,F(xiàn)在主要關(guān)心:
如果數(shù)據(jù)推送頻率不高,并發(fā)壓力不大,可以用基于 AJAX 的長輪詢(long-polling)方式,實現(xiàn)比較簡單。nginx有個Module可以支持long-polling,可能以后還支持Streaming。long-polling每次返回數(shù)據(jù)后是要再次請求。
如果數(shù)據(jù)變化快,想以推送為主,可以用基于 Iframe 及 htmlfile 的流(streaming)方式。這里有比較不錯的介紹,里邊還介紹了APE等一些服務(wù)器實現(xiàn),要根據(jù)具體情況來選擇。比如APE是C實現(xiàn)的,我是用java的,對我來說它不容易擴展(基本javascript的擴展性能可靠性能實現(xiàn)的功能要測試,對于實在想走80端口,這個是我目前找到的功能全,而且官方說支持100K+并發(fā),但是目前資料少,說明用的人不多啊)。
APE1.0主要還是long-polling,流方式使用XHRStreaming在IE上不行;相比而言streamHub流是使用寫<script>標簽實現(xiàn)的,可以跨瀏覽器。那些不開源的不要說了,python也不熟悉,Jetty 6 和 Tomcat 6已經(jīng)支持Comet,一般情況可以滿足,并發(fā)太大了也要做選擇,有人用netty自己實現(xiàn),支持10萬以上。想自己寫服務(wù)器看這個用xsocket實現(xiàn)了。
2010.5補充:以前對長連接和http persistent connection沒有太清晰的概念,在腦子里老是把請求和tcp連接混在一塊想。long-polling方式在firebug里能看到一個請求及數(shù)據(jù)返回響應(yīng),然后再請求,但都是同一tcp連接(支持http1.1的服務(wù)器)。像streamHub那樣用流方式的,我們看到一個返回響應(yīng)數(shù)據(jù)不斷漲,可通過其它請求,改變這一響應(yīng)數(shù)據(jù)內(nèi)容。以前錯誤的認為:這樣一個響應(yīng)才是同一連接,long-polling會重新建立tcp連接。
出于性能或其它原因,有些應(yīng)用比較適合用socket。B/S結(jié)構(gòu)客戶端可以用flash,以后HTML5,也是不錯的選擇。看這里文章中提到:
自己實現(xiàn)的server通常存在性能及可擴展性的問題,因此實現(xiàn)全部功能需要投入大量的開發(fā)精力。Hemlock通過flash長連到XMPP Server上。由于XMPP Server(如openfire, ejabberd等)本身就支持多服務(wù)器,因此使用默認的版本就可以支持上十萬的并發(fā),如果稍加優(yōu)化,同時支持上百萬用戶也不會有太大問題。
openfire開源的,基于mina實現(xiàn) (喜歡java代碼的也可以看看red5或者http://code.google.com/p/gfs-server/)
再加幾個基于netty的開源項目:
http://openr66.free.fr/GoldenGateFTP.html
http://code.google.com/p/jmemcache-daemon/
http://kevwil.github.com/aspen/
http://code.google.com/p/sensei-search/
(看到過的資料單機2*4core 16GB實現(xiàn)近50萬在線連接,每秒處理近10萬請求,c實現(xiàn),內(nèi)核,網(wǎng)卡等都經(jīng)過優(yōu)化;看過java***的就是Using Netty we have comet running on 100.000+ open connections - this uses some GB of memory and 20% of CPU on a quad core server.一個四核服務(wù)器10萬以上連接)
小結(jié):詳解基于HTTP長連接Server PUSH的內(nèi)容介紹完了,希望本文對你有所幫助!