发送图片报错ConnectionResetError: [Errno 104] Connection reset by peer

发送图片报错ConnectionResetError: [Errno 104] Connection reset by peer
强烈推介IDEA2021.1.3破解激活,IntelliJ IDEA 注册码,2021.1.3IDEA 激活码  

大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说发送图片报错ConnectionResetError: [Errno 104] Connection reset by peer,希望能够帮助大家进步!!!

环境

ubuntu 20.04
python 3.6
django 2.2

产生的原因我在网上搜的大概有一下几种

  1. 服务器的并发连接数超过了其承载量,服务器会将其中一些连接关闭;如果知道实际连接服务器的并发客户数没有超过服务器的承载量,则有可能是中了病毒或者木马,引起网络流量异常。可以使用netstat -an查看网络连接情况。
  2. 客户关掉了浏览器,而服务器还在给客户端发送数据;
  3. 浏览器端按了Stop;这两种情况一般不会影响服务器。但是如果对异常信息没有特别处理,有可能在服务器的日志文件中,重复出现该异常,造成服务器日志文件过大,影响服务器的运行。可以对引起异常的部分,使用try…catch捕获该异常,然后不输出或者只输出一句提示信息,避免使用e.printStackTrace();输出全部异常信息。
  4. 防火墙的问题;如果网络连接通过防火墙,而防火墙一般都会有超时的机制,在网络连接长时间不传输数据时,会关闭这个TCP的会话,关闭后在读写,就会导致异常。 如果关闭防火墙,解决了问题,需要重新配置防火墙,或者自己编写程序实现TCP的长连接。实现TCP的长连接,需要自己定义心跳协议,每隔一段时间,发送一次心跳协议,双方维持连接。

其中解决的方式

使用抛出异常的方式
如果是过于频繁请求出错的,可以试用sleep休眠一段时间就可以

我的问题

向前端发送图片文件时,报错连接中断。经过排查是请求头中的文件大小与真实文件大小出现误差,导致出现客户端关闭但服务器仍然发送数据导致连接中断,这是属于第二种问题,解决办法把文件大小改为真实文件大小问题解决

response['Content-Type'] = file_type
response['Content-Disposition'] = 'inline;filename=%s' % the_file_name
# 文件长度
response['content-length'] = size
本文来源it小白求知路,由架构君转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处:https://javajgs.com/archives/29166

发表评论