访问TOP链接超时和重置问题

    前一阵子配合一个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_淘帐本,给出了这些代码修改的反馈,希望更多的开发者可以从使用者加入到参与者来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值