博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
connection reset by peer, socket write error问题排查
阅读量:4626 次
发布时间:2019-06-09

本文共 824 字,大约阅读时间需要 2 分钟。

2018-03-15更新:弄明白connection reset产生的原因,见

在开发文件上传功能时遇到了connection reset by peer, socket write error的错误,排查废了一番功夫,记录一下。

在网上搜索了一下,得到的原因有这些:

  1. 服务器的并发连接数超过了其承载量,服务器会将其中一些连接Down掉;
  2. 客户关掉了浏览器,而服务器还在给客户端发送数据;
  3. 浏览器端按了Stop;

但是看了服务器,不太可能;网络状况了也挺好(测试环境而已)。

跟浏览器也没关系,因为这里上传文件使用的是apache httpclient在上传文件,而且timeout都设置比较长。

最后分析到的问题原因,出在服务端上。服务端是这么处理的:上传文件时在header里含有了文件信息,上传文件成功,记录文件相关信息在DB;如果再次上传这个文件,根据header的文件信息在DB判断是否已经上传,如果确认是重复文件,则直接返回“文件重复”。(这个业务设计有点bug,暂时忽略)

但是现在却遇到重复上传时,客户端httpclient报了“connection reset by peer, socket write error”的错误。

是由于在重复上传时,服务端只取了header就判断了文件重复直接response了,这个时候客户端还在“欢快”的传输文件呢,而服务端直接response把连接关闭了,所以客户端就懵逼了,报了错误。

这个问题暂时还没有找到技术上如何解决(如果找到,后面再补充),所以在业务上进行解决的。在客户端遇到SocketException时,尝试重新上传前,先查询服务端是否已经完成了此文件的上传,如果已经存在,则不用重复上传了,也就可以避免因为重复上传导致的问题,毕竟重复上传也是为了保证在网络不佳时能补偿。

转载于:https://www.cnblogs.com/liqipeng/p/7465411.html

你可能感兴趣的文章
django的模板文件需要为utf-8无bom格式
查看>>
Fedora Linux 18 延期至年底
查看>>
Spring Framework 3.2 RC1 发布
查看>>
基于ios开发点餐系统应用(附带源码)
查看>>
Xenia and Weights(深度优先搜索)
查看>>
文件包含漏洞进阶篇
查看>>
JavaScript的self和this使用小结
查看>>
CSS3.0:透明度 Opacity
查看>>
Arduino Wire.h(IIC/ I2C)语法
查看>>
web高并发的解决方案
查看>>
OC中的NSNumber、NSArray、NSString的常用方法
查看>>
android 用ImageSwitcher+Gallery实现图片浏览效果 分类: ...
查看>>
STM32里面的一些小函数——assert_param,PUTCHAR_PROTOTYPE
查看>>
Java分布式锁的三种实现方案(redis)
查看>>
运行客户端程序报读取配置文件出错的解决方案
查看>>
day 5 - 2 字典(dict)练习
查看>>
微引擎的自定义菜单40063错误解决
查看>>
JAVA wait(), notify(),sleep具体解释
查看>>
数据挖掘十大经典算法
查看>>
WebService原理
查看>>