设备端C SDK。IOT_MQTT_CheckStateNormal 断网下,150S才检测到?
使用SDK联网过程中出现超时,且在上传过程中提示ConnectionTimeOut错误,比较影响用户使用体验。
排查步骤 由于该问题无法复现,现列举以下可能的原因进行逐一排查,以解决OSS SDK的网络超时问题。
网络环境相关排查思路,分析网络路径如下。 手机或PC --- 运营商网络 --- OSS Server 用户所在的网络环境可能处在运营商网络边缘节点,向运营商网络请求成功率比较低。可以利用CDN的边缘加速节点,减少手机或PC网络对运营商网络的依赖。具体链路如下。
手机或PC -- CDN就近节点 -- 运营商网络 -- OSS Server 具体的技术方案参见OSS如何开启CDN加速服务。如果问题没有完全解决,仍有ConnectionTimeOut的错误提示,请查看网络配置的分析。
上传是动态请求,CDN加速效果不佳,建议用全站加速,全站加速对于动态请求有动态加速。另外建议增加下SDK如何设置是走CDN上传,以Java SDK为例,可以参考初始化文档,Endpoint设置为CDN的域名,然后配置文件开启CNAME。 conf.setSupportCname(true); 注:CNAME是指将自定义域名绑定到存储空间上。 网络配置相关的排查思路,以下代码为具体的超时错误信息。 "ConnectionTimeoutError&errormsg=Failed to upload some parts with error: ConnectionTimeout Error: Connect timeout for 60000ms, PUT https://***.oss-cn-hangzhou.aliyuncs.com/***/***/***.mp4? partNumber=2&uploadId=*** -2 (connected: false, keepalive socket: false)headers: {} part_num: 2 从错误信息中可以得出如下结论 。
超过60s没有收到服务器的返回信息而断开连接。 尝试分析CDN提供的日志,确认超时的主要原因是分片还没上传成功,连接就已经断开。 如果上传的文件较大,在弱网络环境下,客户端/PC端发送的请求迟迟得不到OSS服务器的响应。 综合以上分析过程,现推荐以下几种解决方案。
上传方式采用分片断点上传,每个分片的大小不超过1MB。 添加重传机制,保证某一个分片上传失败后还可以继续上传。 增大超时时间。 相关代码如下所示。
//js sdk 分片断点上传示例代码
let retryCount = 0; let retryCountMax = 3; ... const uploadFile = function uploadFile(client) { if (!uploadFileClient || Object.keys(uploadFileClient).length === 0) { uploadFileClient = client; } ...
console.log(${file.name} => ${key}
); const options = { progress, partSize: 1000 * 1024,//设置分片大小 timeout: 120000,//设置超时时间 }; if (currentCheckpoint) { options.checkpoint = currentCheckpoint; } return uploadFileClient.multipartUpload(key, file, options).then((res) => { console.log('upload success: %j', res); currentCheckpoint = null; uploadFileClient = null; }).catch((err) => { if (uploadFileClient && uploadFileClient.isCancel()) { console.log('stop-upload!'); } else { console.error(err); //retry if (retryCount < retryCountMax){ retryCount++; console.error("retryCount : " + retryCount); uploadFile(''); } } }); };
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。