异常描述
项目版本:
项目是SpringBoot
的1.5.9-release
版本,fastdfs版本如下:
1 | <dependency> |
调用方式如下:
我的fastdfs.conf
配置:
1 | connect_timeout = 10 |
java调用:
1 |
|
报错情况:
每次刚启动服务,如果没有直接使用,过一段时间,再调用上传文件服务,会报错,但是再次上传,就没事了,又正常了,报错信息如下:
1 | java.io.IOException: recv package size -1 != 10 |
异常分析
经过多次验证重现这个错误,发现刚启动,间隔时间30秒,就会报错,不能上传,目测和fastdfs.conf
配置的network_timeout =30
有关系。
然后各种百度谷歌,发现有这么一句话:如果客户端服务启动,成功链接到dfs服务器,如果在network_timeout时间内,dfs服务没有接收到任何请求信息,会吧这个客户端踢掉!
日了,为毛要踢掉,我还要用啊,看来每次启动链接成功都需要给dfs服务发送点什么才行!
对dfs有研究了一波,发现fastdfs-client-java
包到ProtoCommon.java本来已经提供了一个发送信息到一个方法,如下:
1 | public static boolean activeTest(Socket sock) |
解决办法
废话不多少,先试一波,修改上面dfs初始化代码如下:
1 |
|
启动项目,等30秒以上,测试,成功!
卧槽,终于记录完了,公司电脑不能上网,上面所有代码纯手工写的,累死!