Chinaunix

标题: 分享个带连接池的fastdfs Java client [打印本页]

作者: mineral_cu    时间: 2014-06-30 22:35
标题: 分享个带连接池的fastdfs Java client

地址 https://github.com/baoming/FastdfsClient


-Changelog

修改和增加了连接池健康检查的feature.
增加了上传slave文件的api.

友情提示,

-没有严格在生产环境使用,请多做测试,有问题可以在github给我发issue.
-没有官方fishman的api那么全,只提供upload和delete,set/get meta的几个常用方法.


并不是我的原创,我也是fork github上别人的项目改的。因不知道原作者怎么联系,所以在这里先感谢他 mikesu (https://github.com/mikesu/FastdfsClient),
要是他在这论坛里,或者有人告诉他一声,加个开源License就更好了。

作者: ccvcd    时间: 2014-08-20 12:24
支持支持支持,,
作者: yangquanwa    时间: 2014-08-27 08:48
不错,不错,我下下来用了哈,稳定性多好的,只是感觉楼主好像是socket链接是单线,并发效率不太高,不过任然要感谢楼主提供的资源
作者: lanfen100    时间: 2015-04-27 14:22
回复 1# mineral_cu


    你好 , 在么 , 关于这个有个问题想请教,不知道怎么联系到你~
    这边测试的时候, 在
if(dataLength%StorageInfo.BYTE_SIZE!=0){
                                throw new IOException("recv body length: " + data.length + " is not correct");
                        }
  这个部分会抛出异常, BYTE_SIZE 您这边定义的600  得到的是612 !!!


    public class StorageInfoCmd extends AbstractCmd<List<StorageInfo>> {

        @Override
        public Result<List<StorageInfo>> exec(Socket socket) throws IOException {
                request(socket.getOutputStream());
                Response response = response(socket.getInputStream());
                if(response.isSuccess()){
                        byte[] data = response.getData();
                        int dataLength = data.length;
                        if(dataLength%StorageInfo.BYTE_SIZE!=0){
                                throw new IOException("recv body length: " + data.length + " is not correct");
                        }

                        List<StorageInfo> storageInfos = new ArrayList<StorageInfo>();
                        int offset = 0;
                        while(offset<dataLength){
                                StorageInfo storageInfo = new StorageInfo(data,offset);
                                storageInfos.add(storageInfo);
                                offset += StorageInfo.BYTE_SIZE;
                        }
                        return new Result<List<StorageInfo>>(response.getCode(), storageInfos);
                }else{
                        return new Result<List<StorageInfo>>(response.getCode(), "Error");
                }
        }
作者: fennykk    时间: 2015-05-13 15:54
回复 4# lanfen100


    确实612,用612没问题。
作者: guoshenghang    时间: 2015-08-21 10:35
public class StorageInfoCmd extends AbstractCmd<List<StorageInfo>> {

        @Override
        public Result<List<StorageInfo>> exec(Socket socket) throws IOException {
                request(socket.getOutputStream());
                Response response = response(socket.getInputStream());
                if(response.isSuccess()){
                        byte[] data = response.getData();
                        int dataLength = data.length;  --我这边取得是97
                        if(dataLength%StorageInfo.BYTE_SIZE!=0){  --BYTE_SIZE定义的是105
                                throw new IOException("recv body length: " + data.length + " is not correct");
                        }

                        List<StorageInfo> storageInfos = new ArrayList<StorageInfo>();
                        int offset = 0;
                        while(offset<dataLength){
                                StorageInfo storageInfo = new StorageInfo(data,offset);
                                storageInfos.add(storageInfo);
                                offset += StorageInfo.BYTE_SIZE;
                        }
                        return new Result<List<StorageInfo>>(response.getCode(), storageInfos);
                }else{
                        return new Result<List<StorageInfo>>(response.getCode(), "Error");
                }
        }

另外我把SIZE改成97 后面解析会报数组越界
作者: poolhe1987    时间: 2015-09-07 10:18
这个连接池能支持多个tracker吗?
作者: wxdh1987    时间: 2017-05-24 15:45
我觉得这样不太好,相当于废弃了官方的底层的tcp协议,而是copy了它的源码(将各种tcp协议抽象了cmd)。假设协议修改或者fastdfs做了修改以后(当然不太可能),自己的东西就全部都要修改了。我的建议是,底层通信还是使用它的jar包提供的api来完成,因为jar和fastdfs毕竟是同步的。我们只要在jar上在封装一层,比如建立自己的tracker连接池,storage连接池。维护好这些就可以了,真正的上传下载还是交给底层来做、
作者: zhoujianqian    时间: 2017-08-16 15:23
请问一下,能增加通过字节流上传文件的方法吗,目前只有通过File类型上传文件的方法,这样限制比较多
作者: zhoujianqian    时间: 2017-08-16 15:23
这个连接池效率怎么样呢?相对于FastDFS的Java客户端来说
作者: ccfish86    时间: 2017-10-26 14:43
zhoujianqian 发表于 2017-08-16 15:23
请问一下,能增加通过字节流上传文件的方法吗,目前只有通过File类型上传文件的方法,这样限制比较多

关于上传File或字节流的问题,我改过一版,生产环境在用,用连接池。唯一问题是功能没官方的支持的全,当然有能力的可以加(我加过)
https://github.com/ccfish86/FastdfsClient


作者: ccfish86    时间: 2017-10-27 09:55
这论坛要黄了吗?为什么回的帖子看不到,都两天多了。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2