`
youxinrencwx
  • 浏览: 67486 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

    解决高并发环境下Redis连接超时与超卖问题

    这个Demo演示了使用redis乐观锁机制解决高并发环境下出现连接超时与超卖(库存出现负数)情况的解决办法。

    c#socket连接池和连接超时时间设置

    提供一个c# socket连接池设计的例子,解决socket并发连接限制的问题,并且提供一种设置连接超时时间的方法,默认连接超时时间是不能设置的,提供了socket网络发送数据的接口.可用于pos小票打印机通讯。

    oracle远程连接服务器出现 ORA-12170 TNS:连接超时 解决办法

    错误描述:oracle远程连接服务器出现 ORA-12170 TNS:连接超时 错误检查:有很多是oracle自身安装的问题,但是我这里服务器配置正常,监听正常,服务正常,远程可以ping通服务器。 这里主要是防火墙问题,解决办法: ...

    Modbus RTU 通信连接超时参数.docx

    Modbus RTU 通信连接超时参数.docxModbus RTU 通信连接超时参数.docxModbus RTU 通信连接超时参数.docxModbus RTU 通信连接超时参数.docxModbus RTU 通信连接超时参数.docxModbus RTU 通信连接超时参数.docxModbus ...

    易语言socket连接超时例程

    易语言socket连接超时例程源码,socket连接超时例程,子程序1,socket,htons,inet_addr,Connect,closesocket,WSAStartup,setsockopt,ioctlsocket,select

    MySQL数据库连接超时(Wait_timeout)问题总结.pdf

    MySQL数据库连接超时(Wait_timeout)问题总结.pdfMySQL数据库连接超时(Wait_timeout)问题总结.pdfMySQL数据库连接超时(Wait_timeout)问题总结.pdfMySQL数据库连接超时(Wait_timeout)问题总结.pdfMySQL数据库连接超时...

    Tcpclient连接服务器连接超时设置

    通过TcpClient与服务器端进行连接,通过timeout来实现连接超时的功能!

    nodejs 关于mysql模块 连接超时自动断开解决方法

    nodejs 关于mysql模块 连接超时自动断开解决方法,在这块遇到的坑,而且坑了很久才找到的,分享只为求分

    解决MySQL 5数据库连接超时问题

    mysql5将其连接的等待时间(wait_timeout)缺省为8小时。怎么不让它超时呢

    Modbus RTU 通信连接超时参数.pdf

    Modbus RTU 通信连接超时参数.pdfModbus RTU 通信连接超时参数.pdfModbus RTU 通信连接超时参数.pdfModbus RTU 通信连接超时参数.pdfModbus RTU 通信连接超时参数.pdfModbus RTU 通信连接超时参数.pdfModbus RTU ...

    Linux下Socket连接超时的一种实现方法

    本文详细介绍了目前各平台通用的设置套接字(Socket)连接超时的办法,介绍了Linux环境下的Socket连接超时的一种实现方法。

    delphi DataSnap连接超时设置无效补丁

    解决问题:delphi D10下(XE8\XE7),DataSnap连接超时设置在android中使用无效,导致不能连接服务器时长时间等待。补丁包带源码及说明。 Datasnap ConnectTimeout android

    socket连接超时例程.rar

    socket连接超时例程.rar

    tcp协议如何处理链接超时

    因为tcp协议时三次握手的,所以tcp协议的通信链接时间会很长,尤其是当服务器ip和port不正确的时候,tcp链接的过程很费时间,如何处理链接超时问题就显得很重要了,这个文档就是如何处理该问题的代码。希望对需要的...

    ora-12170 tns连接超时

    本文适用于本地的客户端连不上服务器的情况,并且对于怎样实现内网和外网的同时访问有一定的参考。

    等保测评:Centos超时退出问题

    等保测评主机测评中需要查询主机的超时退出配置,具体在Centos中的话,主要有两种方式可以实现超时退出的功能。其实这方面的资料很多,但是仍然存在一些地方没有说清楚(sshd_config的一个参数),所以本文的目的之...

    mysql 8小时空闲后连接超时的问题

    当mysql 8小时空闲后会出现连接超时问题,本文介绍要解决这个问题也有一个简单的方法,就是修改mysql的启动参数。缺省情况下mysql的timeout时间是28800秒,正好是8小时,增加一个0就可以了。

    SVN Adapter V1.0 签名认证WIN 11 华为secoClient 客户端 提示提示用户与对方建立连接超时,配

    secoClient 链接失败,SVN Adapter V1.0 签名认证...WIN 11 华为secoClient 客户端 提示“提示用户与对方建立连接超时,配置错误或网络故障” 具体操作参考https://blog.csdn.net/guozai0904/article/details/125440007

    小程序server请求微信服务器超时的解决方法

    本来以为是偶尔的网络问题,但是,同学发现在测试服务器上,很稳定的复现超时!但是在我们本地测试过程中,请求微信服务器又很快响应。嗯,理论上微信服务器不会出问题的…… 试着在服务器上去 curl 微信的接口,...

Global site tag (gtag.js) - Google Analytics