环境
ubuntu 20.04
python 3.6
django 2.2
产生的原因我在网上搜的大概有一下几种
- 服务器的并发连接数超过了其承载量,服务器会将其中一些连接关闭;如果知道实际连接服务器的并发客户数没有超过服务器的承载量,则有可能是中了病毒或者木马,引起网络流量异常。可以使用netstat -an查看网络连接情况。
- 客户关掉了浏览器,而服务器还在给客户端发送数据;
- 浏览器端按了Stop;这两种情况一般不会影响服务器。但是如果对异常信息没有特别处理,有可能在服务器的日志文件中,重复出现该异常,造成服务器日志文件过大,影响服务器的运行。可以对引起异常的部分,使用try…catch捕获该异常,然后不输出或者只输出一句提示信息,避免使用e.printStackTrace();输出全部异常信息。
- 防火墙的问题;如果网络连接通过防火墙,而防火墙一般都会有超时的机制,在网络连接长时间不传输数据时,会关闭这个TCP的会话,关闭后在读写,就会导致异常。 如果关闭防火墙,解决了问题,需要重新配置防火墙,或者自己编写程序实现TCP的长连接。实现TCP的长连接,需要自己定义心跳协议,每隔一段时间,发送一次心跳协议,双方维持连接。
其中解决的方式
使用抛出异常的方式
如果是过于频繁请求出错的,可以试用sleep休眠一段时间就可以
我的问题
向前端发送图片文件时,报错连接中断。经过排查是请求头中的文件大小与真实文件大小出现误差,导致出现客户端关闭但服务器仍然发送数据导致连接中断,这是属于第二种问题,解决办法把文件大小改为真实文件大小问题解决
response['Content-Type'] = file_type
response['Content-Disposition'] = 'inline;filename=%s' % the_file_name
# 文件长度
response['content-length'] = size