前一阵子配合一个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的乐观锁机制来提供解决方案。Redis是一种高性能的键值存储...
提供一个c# socket连接池设计的例子,解决socket并发连接限制的问题,并且提供一种设置连接超时时间的方法,默认连接超时时间是不能设置的,提供了socket网络发送数据的接口.可用于pos小票打印机通讯。
在IT行业中,网络编程是不可或缺的一部分,特别是在使用...总之,`TcpClient`连接服务器时的超时设置是一个重要的实践问题,通过异步编程和`Socket`对象的控制,我们可以灵活地实现这一功能,确保程序的健壮性和效率。
ora-12170 tns 连接超时问题解决方案 在本文中,我们将讨论 ora-12170 tns 连接超时问题的解决方案,该问题常见于客户端无法连接到服务器...通过这种方法,我们可以解决连接超时的问题,并实现内网和外网的同时访问。
错误描述:oracle远程连接服务器出现 ORA-12170 TNS:连接超时 错误检查:有很多是oracle自身安装的问题,但是我这里服务器配置正常,监听正常,服务正常,远程可以ping通服务器。 这里主要是防火墙问题,解决办法: ...
易语言的socket连接超时源码例程应该包含了上述部分或全部的实现,通过阅读和分析源码,你可以更直观地了解如何在易语言环境中处理Socket连接超时问题。源码通常会包含创建Socket对象、设置超时参数、发起连接请求、...
以上代码片段展示了如何在Windows平台上使用Winsock处理TCP连接超时的问题。请注意,实际应用中可能需要根据网络环境和具体需求调整超时时间和错误处理策略。在其他操作系统或编程语言中,如Linux或Python,处理方式...
易语言socket连接超时例程源码,socket连接超时例程,子程序1,socket,htons,inet_addr,Connect,closesocket,WSAStartup,setsockopt,ioctlsocket,select
在Nginx服务器的配置中,超时时间的设置至关重要,因为它关系到服务器对客户端请求的响应速度和系统的稳定性。本文将深入讲解如何在Nginx中配置超时时间,并介绍相关的参数设置。 首先,我们需要了解何时需要设置...
总的来说,优化Modbus RTU通信连接超时参数涉及到对系统整体性能的理解和参数的精细调整。根据实际网络条件和设备性能,合理设置`RESP_TO`、`RETRIES`和`Blocked_Proc_Timeout`,可以提高通信效率,减少因从站故障或...
解决问题:delphi D10下(XE8\XE7),DataSnap连接超时设置在android中使用无效,导致不能连接服务器时长时间等待。补丁包带源码及说明。 Datasnap ConnectTimeout android
即使连接在空闲一段时间后,连接池也会负责重新验证和恢复连接,从而避免因超时而断开的问题。 此外,如果你的应用程序是基于Java的,还可以使用JDBC的`Statement`对象的`setFetchSize()`方法来控制每次从数据库...
连接超时设置可以在企业管理器和查询分析器中进行设置。 在企业管理器中,可以按照以下步骤进行设置: A、选择菜单上的“工具”,然后选择“选项”; B、在弹出的“SQL Server企业管理器属性”窗口中,点击“高级...
该问题的描述提到,"delphi xe DataSnap连接超时设置无效",这意味着开发者在代码中设置的连接超时值并未按预期工作,可能始终等待连接直至超出默认超时时间,而非预设的时间。这可能导致应用程序在连接延迟或服务器...
本文将深入探讨如何诊断并解决SAP PI 中的超时问题,重点针对SAP NetWeaver Process Integration 7.0 和 7.1 版本。 #### 什么是SAP PI超时问题? SAP PI 是一个企业级服务总线(ESB),用于实现企业内部以及企业...
在Istio环境中,间歇性连接重置问题是一个常见的挑战,尤其是在负载均衡和网络通信复杂的场景下。本文将深入探讨如何解决这个问题,基于题目中给出的【标题】"解决Istio中遇到的间歇性连接重置的问题1"和【描述】中...
nodejs 关于mysql模块 连接超时自动断开解决方法,在这块遇到的坑,而且坑了很久才找到的,分享只为求分
总之,"C++ TCP客户端非阻塞连接超时测试源码"是一个实用的示例,它展示了如何在C++中处理TCP连接的非阻塞和超时问题,这对于开发高可用性和高性能的网络应用程序至关重要。通过学习和分析这段代码,开发者可以提升...
MySQL 连接超时问题解决方案 在 MySQL 中,wait_timeout 参数控制着连接的超时时间,如果设置的过大,可能会导致大量的 SLEEP 进程无法...只有通过合适的方法,才能避免连接超时问题的出现,提高系统性能和稳定性。