国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

comet實現(原理)

rozbo / 2391人閱讀

摘要:最近對服務器推送技術比較感興趣,在網上也看了好些文章,由于每個人理解的不同,實現細節(jié)或者語言表達方式不同,本人被各種名詞或者技術實現搞的頭大,于是自己準備整理下。定時器就可以實現,每次請求如果服務器端有更新數據則響應到客戶端。

最近對服務器推送技術比較感興趣,在網上也看了好些文章,由于每個人理解的不同,實現細節(jié)或者語言表達方式不同,本人被各種名詞或者技術實現搞的頭大,于是自己準備整理下。

首先實現服務器推送技術一直一來是B/S應用開發(fā)的一塊難題,因為是基于HTTP協議的,HTTP協議為無狀態(tài),單向性的協議,這種情況導致只有客戶端請求,服務器才能被動響應結果,雖然HTTP協議的優(yōu)勢是很大的,高效,高伸縮性等。但是有優(yōu)勢自然有不足,譬如我想做個聊天室,這種情況導致服務器無法主動向客戶端推送消息,這就有了瓶頸。

....于是人們就開始尋找各種解決方案了。

一種就是控制客戶端的頁面不斷的進行ajax請求,應該很好實現吧。js定時器就可以實現,每次請求如果服務器端有更新數據則響應到客戶端。但是這會造成服務器的嚴重壓力,如果在線用戶數量過多的話,每隔個一兩秒請求一次,哪個服務器能受得了,這種肯定不太現實,或者是最無奈的實現方法。

于是出現了 comet ,comet技術是服務器推技術的一個總稱,但不是具體實現方式。下面我將會講兩種實現方式,是基于HTTP長連接的實現。

第一種叫做長輪詢(long-polling)方式,它同樣使用的ajax,簡單說一下,就是客戶端使用ajax發(fā)送一個請求,服務器端肯定會開啟一個線程,這個線程會時時監(jiān)測要請求的數據是否有變化,如果有變化,則向客戶端輸出最新消息,并關閉鏈接,客戶端收到消息處理之后,再次向服務器端請求,如此循環(huán),所以叫長輪詢,這種實現方式比起上一種自然要好的多了,不需要客戶端不斷的ajax請求,減輕服務器端的一定壓力,而且可以算得上是實時的。

另外一種是流方式,這種和長輪詢方式挺像,只有一點區(qū)別,就是流方式是在客戶端請求服務端并建立鏈接之后,服務器端始終不會關閉鏈接(直到超時,斷電或者其他特殊情況)每次有數據時,就向客戶端進行輸出,而不像長輪詢每次向客戶端輸出之后,都要關閉鏈接。

關于長輪詢和流方式注意以下:

在長輪詢方式下,客戶端是在 XMLHttpRequest 的 readystate 為 4(即數據傳輸結束)時調用回調函數,進行信息處理。當 readystate 為 4 時,數據傳輸結束,連接已經關閉,長輪詢方式IE、Mozilla FireFox 都支持。而至于流方式,Mozilla Firefox 提供了對流方式的支持,即 readystate 為 3 時(數據仍在傳輸中),客戶端可以讀取數據,從而無須關閉連接,就能讀取處理服務器端返回的信息。IE 在 readystate 為 3 時,不能讀取服務器返回的數據,目前 IE 不支持流方式。

comet實現瓶頸解決——服務器servlet線程阻塞問題

到這里大家可能會想到另外一個問題,那就是客戶端每來一個請求,都要在服務器端開一個線程來監(jiān)測數據是否發(fā)生變化,即使數據很長時間內都不會發(fā)生改變,這條線程依然
在這里阻塞著,資源不能得到釋放,線程在這里又沒其他事干,如果有過多的用戶、過多的線程,自然會造成服務器的資源,內存不足的情況。這是個問題,不過既然有問題,自然有解決方法。
目前有兩種解決方法,第一種是利用Tomcat 和 Jetty這兩種開源服務器對NIO的支持 代碼實現和添加服務器支持可以參考http://www.ibm.com/developerw...,第二種則是Java 1.6 出來的Servlet3.0,Servlet3.0可以實現真正的異步處理,就是新開一個線程用于處理復雜業(yè)務,而servlet線程本身則繼續(xù)往下執(zhí)行直到結束之后,再返回servlet容器,待到另一條線程業(yè)務處理完之后,再向客戶端輸出結果。但是使用servlet3.0,需要tomcat7和以上才支持,servlet3.0的實現百度就有好多,就不在此多贅述了。只談理論。。。

參考:http://www.ibm.com/developerw...
https://software.intel.com/zh...
http://www.itjhwd.com/comet-j...

https://www.cnblogs.com/wodem...【有案例】

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73609.html

相關文章

  • comet實現原理

    摘要:最近對服務器推送技術比較感興趣,在網上也看了好些文章,由于每個人理解的不同,實現細節(jié)或者語言表達方式不同,本人被各種名詞或者技術實現搞的頭大,于是自己準備整理下。定時器就可以實現,每次請求如果服務器端有更新數據則響應到客戶端。 最近對服務器推送技術比較感興趣,在網上也看了好些文章,由于每個人理解的不同,實現細節(jié)或者語言表達方式不同,本人被各種名詞或者技術實現搞的頭大,于是自己準備整理下...

    zhongmeizhi 評論0 收藏0
  • JavaScript Ajax與Comet——“其他跨域技術”的注意要點

    摘要:由兩部分組成回調函數和數據。回調函數是當響應到來時應該在頁面中調用的函數,回調函數的名字一般是在請求中指定的。下面是以個的例子回調函數的名字就是是通過動態(tài)的元素來使用的,使用時可以為屬性指定一個跨域。是為與其他傳遞消息的很相似。 圖像Ping技術 根據一個網頁可以從任何網頁中加載圖像而不用擔心使用跨域的原理, 我們可以動態(tài)的創(chuàng)建圖像, 使用他們的onload和onerror事件處理程序...

    Hwg 評論0 收藏0
  • websocket 原理

    摘要:注意實際上指的是一種協議,與我們熟知的協議是同等的一個網絡協議。協議與的聯系是指的一系列新的,或者說新規(guī)范,新技術。注意下面的請求報文與響應報文中的內容不是完整的報文,而是基于請求響應報文添加的內容。 背景 以前的網站為了實現推送功能,使用的方法都是輪詢。所謂的輪詢就是在特定的時間間隔(例如1秒),由瀏覽器向服務器發(fā)出一個 Http request,然后服務器返回最新的數據給客戶端瀏覽...

    asoren 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<