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

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

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

    Chan Chen Coding...

    IE6的連接數限制問題

    先描述一下問題: 
    有一個管理Job的UI,選中一些Job可以Run,每次只能啟動一個。還有一個UI通過Timer定時發Ajax請求服務端,查詢并顯示Job的運行狀況(進度)。 

    奇怪的問題出現了: 
    1)在FireFox和IE8運行正常(貌似正常,稍后再解釋)。其他瀏覽器未測試。 
    2)IE6,7及更早版本,Timer無法檢測到多于1個的Job運行。 

    先檢查了一遍代碼,Timer的控制沒有問題。不行就使用Fiddler吧。剛好是IE的問題。 

    觀察HTTP發現一個現象,運行Job的HTTP似乎沒有成功,因為Body是-1,之后是每隔一秒的Timer發起的HTTP。如果再啟動一個Job,發現Timer停止了!! 

    等待第一個Job運行成功之后,Timer又恢復了(重新發送Ajax請求)!! 

    似乎是運行Job的請求阻塞了(實際上該請求長時間沒有返回,因為運行Job需要幾分鐘甚至更多時間)。 

    為啥不使用DWR3.0的Push技術?后來跟同事討論明白,這不過是把Timer從客戶端轉移到了服務端。 

    記起來了,俺好像讀DWR源代碼的時候(當時對如何實現推非常感興趣),見過一段代碼分析Browser的類型和連接數,有的情況還拋出了異常。 

    明白了,肯定是IE6有連接數限制問題,后來得知,默認情況下,它不支持同時超過2個連接。哈哈。這就對了。 

    RunJob占用了一個(幾分鐘不等), 
    Timer占用了一個(很短暫)。 

    剛好2個。 
    Java代碼  收藏代碼
    1. public class BrowserDetect  
    2. {  
    3.     /** 
    4.      * How many connections can this browser open simultaneously? 
    5.      * @param request The request so we can get at the user-agent header 
    6.      * @return The number of connections that we think this browser can take 
    7.      */  
    8.     public static int getConnectionLimit(HttpServletRequest request)  
    9.     {  
    10.         if (atLeast(request, UserAgent.IE, 8))  
    11.         {  
    12.             return 6;  
    13.         }  
    14.         if (atLeast(request, UserAgent.Firefox, 3))  
    15.         {  
    16.             return 6;  
    17.         }  
    18.         else if (atLeast(request, UserAgent.AppleWebKit, 8))  
    19.         {  
    20.             return 4;  
    21.         }  
    22.         else if (atLeast(request, UserAgent.Opera, 9))  
    23.         {  
    24.             return 4;  
    25.         }  
    26.         else  
    27.         {  
    28.             return 2;  
    29.         }  
    30.     }  
    31. //....  
    32. }  


    接下來就是查資料做試驗,驗證該問題是否正確。通過在注冊表設置Internet Settings參數,實現了更多連接。例如10個。 

    但是Job可能很多,不可能無限制增加連接數,所以RunJob不應長期占用連接,它應該把Job插入隊列并立即返回。 

    至此問題的源頭終于找到了,Fiddler又幫了大忙。 

    讀源代碼是了解技術運作細節的最好方法,此外還能學到好的編程習慣。

    -----------------------------------------------------
    Silence, the way to avoid many problems;
    Smile, the way to solve many problems;

    posted on 2013-05-21 15:19 Chan Chen 閱讀(238) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 一二三四免费观看在线电影| 一级毛片成人免费看a| 精品无码国产污污污免费网站| 青青草原亚洲视频| 中国毛片免费观看| 亚洲精品无码MV在线观看| 男人天堂免费视频| 亚洲色大成网站www永久一区 | 亚洲hairy多毛pics大全| 免费三级毛片电影片| 亚洲色欲色欲www| 成人无遮挡毛片免费看| 亚洲av日韩专区在线观看| 四虎AV永久在线精品免费观看| 黄色一级视频免费| 亚洲小说区图片区另类春色| 免费观看男人吊女人视频| 日木av无码专区亚洲av毛片| 99热在线精品免费全部my| 亚洲综合精品伊人久久| 免费人成视频在线观看不卡| 51午夜精品免费视频| 五月天网站亚洲小说| 毛片在线看免费版| 无码精品人妻一区二区三区免费 | 亚洲精品~无码抽插| 日韩免费无码一区二区三区| 亚洲AV无码久久久久网站蜜桃| 成人无遮挡毛片免费看| 国产99精品一区二区三区免费| 中文字幕亚洲无线码a| 7m凹凸精品分类大全免费| 亚洲熟妇无码一区二区三区 | 亚洲第一页在线播放| 四虎在线视频免费观看| yellow免费网站| 久久亚洲熟女cc98cm| 免费大香伊蕉在人线国产| 两个人日本免费完整版在线观看1| 久久夜色精品国产噜噜亚洲AV| 成人免费在线视频|