后端开使用Java语言开发,项目是springboot项目,修改配置类
OkHttpConfiguration
尝试解决办法:
1. 修改配置类中的 OkHttpClient Bean对象的中的retryOnConnectionFailure属性如下图:
2.具体调用方法设置Request对象设置请求后关闭webSocket连接
以上两种方法仅限个人尝试,并不一定能解决!,使用第二种方法后没有再出现该问题!
排查与解决
java
.
io
.
EOF
Exception
: \n not found:
limit
=0
content
=…
起因是项目向华为云 OBS 请求视频, 偶现题目中的异常;如果等一段时间(30s),就可以正常读取到视频。
原因是 OBS SDK 底层用的
Okhttp
连接池,而
Okhttp
的 GitHub 上也有相关 issue:
服务器在返回数据后就直接关闭 TCP 连接,而客户端(项目应用)却将连接放入连接池重复使用;
当下次请求复用时,连接已经被关闭,就读取不到返回值,报上述异常。
在一次使用
OkHttp
对接两个第三方接口的时候遇到了这个报错,情景是这样的,先请求第一个接口得到一个结果,再把第一个结果作为参数传到第二个接口,但是第二个接口一直报这个错误。2 添加请求头 addHeader(“Connect
io
n”, “close”)或addHeader(“Connect
io
n”, “keep-alive”)试遍了安卓的网络框架都是这样,最后才断点发现是第一个接口返回的数据是Url编码过的,第二个接口直接传未解码的数据就是会报错,最后解码再传就正常了,真坑啊,浪费时间。
1、如果你没有使用
OkHttp
Client单例模式的话,而是每次都new 一个
OkHttp
Client 在大量的请求下,很容易就会出现OOM 因为
OkHttp
Client 每new 一个 就会创建一个线程池,线程池默认有5个线程,不断new 就会出现OOM
2、在使用
OkHttp
Client 单例模式的情况下,出现
IO
Exception
和
EOF
Exception
类似如下:
java
.
io
.
IO
Exception
: unexpected end of stream on Connect
io
n{xxx,
请求方式 ----> POST
Http 版本:http/1.1
请求头 ---->
Content
-Type: applicat
io
n/x-www-form-urlencoded
请求参数 ----> token: ZEdsaGJtaHZibWRtWVc0PSRkR2xoYm1odmJtZG1ZVzQ9JE1UWXlOVFExTmpFM05TNDNNVEE0JDRjNDRjZDkwZjViYzBkYzIwMDU3NWM1ZjU3NTYwZDYwu;...
由于此问题不是必现,故不太好定位排查,根据关键异常信息:
EOF
一般指输入流达到末尾,无法继续从数据流中读取; 怀疑可能是由于双方(client<->server) 建立的连接,某一方主动close了,为了验证以上猜想,笔者查阅了相关资料,以及做了一些简单的代码实验
Github Issue or google or stackoverflow?
根据@...
今天遇到一个
OkHttp
Client的坑,报错信息如下:
[20200320 10:47:10.553] | [ERROR] | [localhost] | [http-n
io
-28080-exec-22] | [c.u.] | [unexpected end of stream on
okhttp3
.Address@fe4f10d5] |
`
java
.
io
.
IO
Exception
: unexpe...
java
.
io
.
EOF
Exception
不是一个常出现的问题,而且并发症
java
.lang.NullPointer
Exception
(空指针异常),只有objectInputStream.readObject();接收为null且1.txt文件为空时才会出现
EOF
Exception
只需要捕获,该bug在本场景下被捕获后程序就不会终止了,甚至不处理也行。