免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 20538 | 回复: 11
打印 上一主题 下一主题

[FastDFS] 分享个带连接池的fastdfs Java client [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-06-30 22:35 |只看该作者 |倒序浏览

地址 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就更好了。

论坛徽章:
0
2 [报告]
发表于 2014-08-20 12:24 |只看该作者
支持支持支持,,

论坛徽章:
0
3 [报告]
发表于 2014-08-27 08:48 |只看该作者
不错,不错,我下下来用了哈,稳定性多好的,只是感觉楼主好像是socket链接是单线,并发效率不太高,不过任然要感谢楼主提供的资源

论坛徽章:
0
4 [报告]
发表于 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");
                }
        }

论坛徽章:
0
5 [报告]
发表于 2015-05-13 15:54 |只看该作者
回复 4# lanfen100


    确实612,用612没问题。

论坛徽章:
0
6 [报告]
发表于 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 后面解析会报数组越界

论坛徽章:
0
7 [报告]
发表于 2015-09-07 10:18 |只看该作者
这个连接池能支持多个tracker吗?

论坛徽章:
0
8 [报告]
发表于 2017-05-24 15:45 |只看该作者
我觉得这样不太好,相当于废弃了官方的底层的tcp协议,而是copy了它的源码(将各种tcp协议抽象了cmd)。假设协议修改或者fastdfs做了修改以后(当然不太可能),自己的东西就全部都要修改了。我的建议是,底层通信还是使用它的jar包提供的api来完成,因为jar和fastdfs毕竟是同步的。我们只要在jar上在封装一层,比如建立自己的tracker连接池,storage连接池。维护好这些就可以了,真正的上传下载还是交给底层来做、

论坛徽章:
0
9 [报告]
发表于 2017-08-16 15:23 |只看该作者
请问一下,能增加通过字节流上传文件的方法吗,目前只有通过File类型上传文件的方法,这样限制比较多

论坛徽章:
0
10 [报告]
发表于 2017-08-16 15:23 |只看该作者
这个连接池效率怎么样呢?相对于FastDFS的Java客户端来说
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP