<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    聶永的博客

    記錄工作/學(xué)習(xí)的點(diǎn)點(diǎn)滴滴。

    Servlet 3.0筆記之異步請(qǐng)求Comet流推送(Streaming)實(shí)現(xiàn)小結(jié)

    Servlet3規(guī)范支持異步請(qǐng)求(或者稱為長(zhǎng)連接,或者反向AJAX,或者COMET,或者服務(wù)器推送技術(shù)):無阻塞的輸入與輸出模型,可以延時(shí)的請(qǐng)求和響應(yīng)功能,還有超時(shí)事件通知,看上去一切都是那么完美。
    但終端瀏覽器支持長(zhǎng)連接情況差強(qiáng)人意,對(duì)Comet的支持大致匯總?cè)缦拢?/div>
    1. IE瀏覽器最佳實(shí)踐是使用htmlfile ActiveXObject,以及創(chuàng)建隱藏IFrame組件,可以跨越IE6-IE8;雖IE 8支持XDomainRequest支持HTTP Streaming,但僅僅是IE 8。
    2. Firefox 瀏覽器相當(dāng)棒,支持XMLHttpRequest Streaming 和隱藏的IFrame組件。
    3. Safari 瀏覽器支持XMLHttpRequest Streaming。
    4. Chrome有些無奈,算不上支持XMLHttpRequest Streaming,使用IFrame的話會(huì)一直出現(xiàn)正在加載中的標(biāo)志。
    5. Opera也不支持XMLHttpRequest Streaming,使用IFrame的話會(huì)一直出現(xiàn)正在加載中的標(biāo)志。
    總之,使用IFrame是一個(gè)不錯(cuò)的方案,在IE、Firefox下表現(xiàn)的很完美,在其它瀏覽器下只能忍受討厭的正在加載中。數(shù)據(jù)交換格式可以采用JS腳本調(diào)用。
    但無論哪一種方案,都必須認(rèn)識(shí)到,一個(gè)持久的連接,當(dāng)頁(yè)面內(nèi)容一直在遞增時(shí),會(huì)越來越膨脹,會(huì)占用用戶機(jī)器的CPU,盡量隔一段時(shí)間斷開連接,重新請(qǐng)求。
    HTTP 1.1規(guī)范中聲明客戶端不應(yīng)該與服務(wù)器端建立超過兩個(gè) HTTP 連接,因此瀏覽器內(nèi)需要借助腳本避免客戶重開兩個(gè)腳本。
    按照目前情形下,需要借助AJAX PULL  + COMET PUSH 相結(jié)合來打造相當(dāng)好的用戶體驗(yàn)。
    Servlet本身,無論2.4或者2.5的版本,可以使用一個(gè)循環(huán)達(dá)到長(zhǎng)連接的目標(biāo):
    /**
    * 一個(gè)典型的長(zhǎng)連接實(shí)現(xiàn)
    *
    * @author yongboy
    * @date 2011-1-14
    * @version 1.0
    */
    @WebServlet("/demoLongLink")
    public class DemoLongLinkServlet extends HttpServlet {
    private static final long serialVersionUID = 4617227991063927036L;

    protected void doGet(HttpServletRequest request,
    HttpServletResponse response) throws ServletException, IOException {

    response.setHeader("Cache-Control", "private");
    response.setHeader("Pragma", "no-cache");
    response.setHeader("Connection", "Keep-Alive");
    response.setHeader("Proxy-Connection", "Keep-Alive");
    response.setContentType("text/html;charset=UTF-8");

    PrintWriter out = response.getWriter();
    out.println("<div>Start ...</div>");
    out.flush();

    int num = 0;
    int max = 100;
    while (true) {
    out.println("<div>" + (num++) + "</div>");
    out.flush();

    if (num >= max) {
    break;
    }

    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }

    out.println("<div>Done !</div>");
    out.flush();
    out.close();
    }
    }
    每一個(gè)連接線程都處于一個(gè)不斷循環(huán)之中,不能夠有效釋放,相當(dāng)?shù)睦速M(fèi)服務(wù)器資源,有可能導(dǎo)致容器內(nèi)線程池耗盡,將無法應(yīng)對(duì)后續(xù)請(qǐng)求。同時(shí)少了異步連接的特性,無法直接定義超時(shí)時(shí)間,更不要說超時(shí)事件,超時(shí)監(jiān)聽器等企業(yè)特性了。
    當(dāng)然也可以實(shí)現(xiàn)異步請(qǐng)求,但可能沒有規(guī)范那般嚴(yán)格。
    同步請(qǐng)求的模型:
    對(duì)比異步請(qǐng)求模型:
    上面兩張圖借用了涂0實(shí)驗(yàn)室,表示感謝。
    在前兩篇文章中,使用一個(gè)單獨(dú)線程處理資源,分發(fā)到大部分的異步請(qǐng)求中。

    posted on 2011-01-14 10:26 nieyong 閱讀(2363) 評(píng)論(0)  編輯  收藏 所屬分類: Servlet3

    公告

    所有文章皆為原創(chuàng),若轉(zhuǎn)載請(qǐng)標(biāo)明出處,謝謝~

    新浪微博,歡迎關(guān)注:

    導(dǎo)航

    <2011年1月>
    2627282930311
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    統(tǒng)計(jì)

    • 隨筆 - 152
    • 文章 - 0
    • 評(píng)論 - 310
    • 引用 - 0

    常用鏈接

    留言簿(58)

    隨筆分類(130)

    隨筆檔案(151)

    個(gè)人收藏

    • 國(guó)內(nèi)老牌GreenVPN,翻墻速度確實(shí)杠杠的!
    • 個(gè)人一直在使用中,在線觀看www.youtube.com上高清視頻一點(diǎn)都不卡。 每個(gè)月才18塊錢,一個(gè)季度48,再超值提供一個(gè)9折優(yōu)惠碼:freevpnssh。 我平常在Linux下安裝/更新軟件,壓根不用擔(dān)心GFW阻撓了, 更不用提windows 7了。

    最新隨筆

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲国产成人久久精品app| 亚洲国产精品无码专区影院| 亚洲制服丝袜一区二区三区| 久久这里只精品热免费99| 国产亚洲精久久久久久无码| 中文字幕免费在线看电影大全 | 亚洲日韩中文在线精品第一| 美女被艹免费视频| 亚洲国产成人乱码精品女人久久久不卡 | 亚洲乱妇老熟女爽到高潮的片| 在线观看www日本免费网站| 久久久久亚洲AV无码专区首JN| 97免费人妻无码视频| 日韩亚洲产在线观看| 最新69国产成人精品免费视频动漫| 亚洲av无码专区在线电影天堂 | 亚洲免费在线观看| 国产亚洲人成网站观看| 在线观看www日本免费网站| 亚洲人成网站18禁止久久影院 | 久久久亚洲欧洲日产国码是AV| 亚洲无砖砖区免费| 亚洲日韩国产二区无码| 可以免费观看一级毛片黄a | 精品视频免费在线| 亚洲日韩乱码中文无码蜜桃臀网站 | 久久久久亚洲精品美女| 999久久久免费精品国产| 自拍偷自拍亚洲精品播放| ZZIJZZIJ亚洲日本少妇JIZJIZ| 午夜理伦剧场免费| 亚洲色在线无码国产精品不卡| 全亚洲最新黄色特级网站 | 国产福利免费观看| 免费看黄的成人APP| 亚洲人成人网毛片在线播放| 亚洲高清最新av网站| 最近免费中文字幕大全高清大全1| 亚洲色欲色欲www在线播放| 亚洲中文字幕无码爆乳av中文| 无码一区二区三区免费|