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

            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 岑文初 閱讀(1719) 評論(1)  編輯  收藏

          評論

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


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


          網站導航:
           
          主站蜘蛛池模板: 佳木斯市| 苏州市| 搜索| 福州市| 崇文区| 千阳县| 余姚市| 灵石县| 龙里县| 湖南省| 清河县| 湖口县| 普格县| 比如县| 旺苍县| 鲁山县| 和静县| 泸州市| 邵东县| 平定县| 罗平县| 揭东县| 常宁市| 延安市| 钟祥市| 玛沁县| 临沭县| 天柱县| 锡林郭勒盟| 永春县| 甘德县| 瑞安市| 内乡县| 弥勒县| 玉树县| 米泉市| 林周县| 正安县| 河北省| 阿克苏市| 太谷县|