最近在项目中做文件上传到FastDFS,遇到一个问题,FastDFS启动服务第一次上传文件报错: java.io.IOException: recv package size -1 != 10,但是第二次之后再上传就好使了。将原因和解决方案记录如下。
异常原因
经过上网各种查询之后发现原因和配置项 network_timeout 相关,如果客户端服务启动后在network_timeout 设置的时间内FDFS服务没有接收到任何请求,就会把这个客户端服务踢掉。如果在network_timeout 设置时间内请求则不会有问题。
解决方案
服务启动后,在初始化时通过 ProtoCommon.activeTest(trackerServer.getSocket()) 给fdfs发送一条消息
// 初始化时候关键代码
trackerClient = new TrackerClient();
TrackerServer trackerServer = trackerClient.getConnection();
ProtoCommon.activeTest(trackerServer.getSocket()); // 给FastDFS发送消息
storageClient = new StorageClient(trackerServer, storageServer);
然后重新启动服务测试就好使了