放翁(文初)的一畝三分地

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            210 隨筆 :: 1 文章 :: 320 評論 :: 0 Trackbacks

          前一陣子配合一個ISV一直在查訪問TOP服務鏈接被重置的問題,當時認為是SDK的問題,因此我就將SDK的數據鏈路層代碼單獨剝離出來給ISV測試,沒有發現鏈接重置的問題。在加上部分業務代碼以后,有出現服務重置,但是概率很低。今天ISV同學給我發來了修改后的代碼(重置情況降低),這種修改還是有道理的,因此后續配合會升級SDK,這里也分享一下。(當時也考慮過這方面的問題,但是看了實現代碼覺得概率不大,但是可能也就是這點概率在網絡或者服務質量差的時候會被放大)
               
                ......
                connection.getOutputStream().write(buffer.getBytes());
                // 獲取鏈接的返回結果
                TaobaoResponse response = new TaobaoResponse();
                //獲取requestUrl與requestBody
                response.setRequestUrl(connection.getURL().toString());
                response.setRequestBody(buffer);
               
                String systemParameters = connection.getURL().getQuery();
                String appParameters = buffer;
                setRequestParametersForResponse(response, systemParameters, appParameters);
               
                String body = FetchUtil
                      .inputStreamToString(connection.getInputStream());
                ......
                return response;
            
           
              觀察 String body = FetchUtil.inputStreamToString(connection.getInputStream());的位置,其實在connection.getOutputStream().write(buffer.getBytes());這部已經將內容flush到服務端,此時由于沒有讀入輸入流,因此管道一直hold,做了很多和通信不相關的事情,但是這期間的時間還是會被算入在通信超時重置的時間內,因此將讀入數據流提前到發出請求以后,可以防止中間無關處理導致連接超時和鏈接重置的概率。這點在SDK中將改進,也提醒其他開發者,通信流程中避免無關的處理嵌入在通信事務中,降低信道利用率。對通信通道的快取快放能夠增加處理能力,業務處理可以另起線程單獨后續處理。

              總結來說就是:對于瓶頸性資源(DB,Socket)等,在流程處理的時候盡量實現資源高效利用,業務相關操作非必要情況下脫離對瓶頸資源操作的事務。

             這里特別感謝挖財365_淘帳本,給出了這些代碼修改的反饋,希望更多的開發者可以從使用者加入到參與者來。

           

          本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/cenwenchu79/archive/2010/06/09/5658195.aspx

          posted on 2010-06-09 13:34 岑文初 閱讀(1721) 評論(1)  編輯  收藏

          評論

          # re: 訪問TOP鏈接超時和重置問題 2010-06-12 02:25 Node
          Event based IO  回復  更多評論
            


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


          網站導航:
           
          主站蜘蛛池模板: 吐鲁番市| 吉木乃县| 十堰市| 海宁市| 尤溪县| 贡山| 惠安县| 桑植县| 贵南县| 定襄县| 通榆县| 漳平市| 绵阳市| 麦盖提县| 乌兰察布市| 威远县| 龙门县| 万年县| 大渡口区| 四川省| 嘉荫县| 红桥区| 凤庆县| 宿州市| 通州区| 民勤县| 柳江县| 运城市| 嘉黎县| 大连市| 宁南县| 汾西县| 上犹县| 绿春县| 买车| 佛教| 蚌埠市| 将乐县| 中牟县| 德州市| 鄂托克前旗|