yuqih 发表于 2014-10-25 00:24

fastdfs java客户端重写分享

基于java客户端1.24改写
主要目的:
1.代码整理的容易理解点,而且更适合spring使用,且放弃了静态类加载配置文件的方式
2.使用commoms-pool2做一个简单的socket连接池
改动及尚未完成的:
1.使用的接口做了一些调整,比如metadata现在不和文件一起上传,因为我看官方的包也是先上传文件在上传metadata,metadata上传不成功再删除上传的文件
2.取fileinfo的地方没有对文件名进行解析,直接请求了服务器,算是没写完整

代码地址svn://svn.code.sf.net/p/fastdfsclient/code
其中代码tags中1.24是我将官方代码改成了maven项目
trunk中的是我的代码,有一个简单的测试类作为demo

目前注释缺失比较多,希望大家能看看我的代码提点意见,如果觉得可以用的话随便使用

guopeihui 发表于 2014-10-30 22:44

你这个东西和原先的java客户端有啥区别呢?

coraldane 发表于 2014-10-31 21:09

checkout出来看了下,使用上比原来余大写的那个方便多了
不过现在功能还不是很完善,最好多给几个Test Case
在TestCase上面写上注释,主要用于什么用途
还是很感谢楼主的分享和开创精神

coraldane 发表于 2014-10-31 21:10

还有,现在托管的地址是sf的SVN,最好改成github.com托管
这个是比较正规的开源代码托管平台

coraldane 发表于 2014-10-31 21:12

源代码的包名不要使用thrid.rewrite使用一个正规一点的
比如com.github.工程名

guopeihui 发表于 2014-11-01 21:41

你写的这个客户端上传文件的时候必须要些groupname,可以不写吗?还有那个groupstate的获取是不是准确呢?

yuqih 发表于 2014-11-02 21:30

回复 6# guopeihui


    groupname可以为null,此时就是系统分配,GroupState, StorageState这个应该是准确的
    其实所有的内容我都没有修改余大原有的逻辑,只是把代码结构按我使用的喜好调整了下

guopeihui 发表于 2014-11-03 13:43

其实这个我也看了,我问的意思是可以根据上传文件的大小选择group,前提是GroupState的获取准确回复 7# yuqih


   

yuqih 发表于 2014-11-03 22:23

回复 8# guopeihui

个人觉得这种需求不应该由fastdfs的客户端来完成,同时注意groupState和storageState即使每次都向服务器请求拿到的也不是实时信息,好像我看文档,这些信息是storage节点定期向tracker节点推送信息的,默认的间隔大概是1分钟。

同时即使groupState是很准确的,如果每次上传都要去获取信息的话,是很影响上传的效率的。还有就是fastdfs的适应场景是<500M(其实一般就几十k到几十M)的小文件,而且这些文件一般不需要修改或追加,很少会出现依靠groupState来判断的情况,如果特大文件,建议使用hdfs等适合分布式计算的文件服务器。

至于你说的这种情况,我的做法是在应用中定期获取groupState,比如10分钟获取一次,如果groupState中的剩余容量小于某个值,则在可用列表中把这个group去掉。如果storage配置文件中的剩余容量设置的是30g,那么在groupstate中剩余容量在50g时就可以将这个节点从可用列表中移除了。


   

blackhorse_lj 发表于 2015-12-03 09:08

回复 1# yuqih

NB,看着官方写的源码 完全是C语言的风格,我都快哭啦,自己重构了部分代码,除了核心代码,外围代码又重新封装了一下,另外我也是用commonPool做的连接池,只是批量上传图片经常出现各种问题,希望这个代码能够解决我的问题,还有那个对socket连接池的配置在哪
   
页: [1] 2
查看完整版本: fastdfs java客户端重写分享