免费注册 查看新帖 |

Chinaunix

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

[FastDFS] fdfs-java-pool连接池V1.0版本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-25 12:10 |只看该作者 |倒序浏览
本帖最后由 zhanghua1199 于 2012-12-25 12:11 编辑

fdfs--java--v1.0连接池.zip (21.79 KB, 下载次数: 488)
这是以前的版本说明,可以参考一下。
因为业务场景web管理平台上传文件,但由于使用fastdfs java api得到的连接并不支持多线程,但也不能每次申请一个接连之后就关闭(浪费资源)。故需要一个连接池来提高操作文件效率


以下是我看fastdfs java api源代码的时候总结出来的一点小东东,能明白就明白,不明白也行(写的比较乱)。

        使用storageClient上传文件时,如果storageServer为null,则程序自动
         创建trackerServer,根据trackerServer得到storageServer,并返回storageServer
         ,在返回storageServer之前会关闭trackerServer。通过storageServer上传完文件
         之后,关闭storageServer.
          反之storageServer不为null则不会被关闭。
         按这个逻辑,创建完storageClient,storageServer,则trackerServer就可以关闭了。
         其实不然,这样得到的storageClient上传文件只会上传到storageServer所指向的主机,比方说,

         现有a,b两台主机,程序获得的storageServer只指向a.以后使用storageclient上传的文件都会
         上传到a的storage,并不会上传b的storage.这样导致不平衡
         正常做法建议:trackerServer可以创建连接池,storageServer每次上传文件都重新创建一个。

目前发表这个是更新版,修改了几个bug,和增加了点功能。

1、本连接池是个人所写,公司内部在用()。
2、目前接口只提供了上传和删除操作,其它操作需要自己增加。

        连接池代码更新版,新增以下参数
        size--->连接池大小。默认2个
        waitTimes --->等待超时,默认两秒,单位为秒
        其它不变。一般构造形式如下:
        只带域名
        ImageServer ims=new ImageServerImpl("imageserver.com");
         
        带有端口形式如下:
        ImageServer ims=new ImageServerImpl("imageserver.com",22122);
         
        带有连接池大小构造如下:
        ImageServer ims=new ImageServerImpl("imageserver.com",22122,5);
         
        设置等待超时:
        ims.setWaitTimes( 5 ); //五秒
3、支持当管理平台的使用连接池与fdfs连接,当fdfs宕机,重启后,管理平台无需重启,连接自动建立。

论坛徽章:
0
2 [报告]
发表于 2012-12-25 12:13 |只看该作者
如果发现什么bug,望及时到
谢  212801927(群)里的指点

论坛徽章:
0
3 [报告]
发表于 2013-10-24 14:08 |只看该作者
使用了你提供的连接池。但是发现一个问题连接池初始化大小最多只能装36个。再大的话在初始化连接池时调用org.csource.fastdfs.ProtoCommon.activeTest(trackerServer.getSocket());会报错 异常为:
java.net.SocketException: Software caused connection abort: recv failed
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at java.net.SocketInputStream.read(SocketInputStream.java:90)
        at org.csource.fastdfs.ProtoCommon.recvHeader(ProtoCommon.java:212)
        at org.csource.fastdfs.ProtoCommon.activeTest(ProtoCommon.java:364)
        at org.csource.connectionPool.imageserver.pool.ConnectionPool.init(ConnectionPool.java:5
        at org.csource.connectionPool.imageserver.pool.ConnectionPool.<init>(ConnectionPool.java:3
        at org.csource.connectionPool.imageserver.ImageServerImpl.<init>(ImageServerImpl.java:37)
        at org.csource.fastdfs.test.TestTomcatUpload.<clinit>(TestTomcatUpload.java:30)
        at org.apache.jsp.uploadFile.upload1_jsp._jspService(upload1_jsp.java:65)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:38
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Thread.java:619)

楼主有碰到这种情况吗?有解决思路吗?

论坛徽章:
0
4 [报告]
发表于 2014-06-17 14:12 |只看该作者
我对比了 你的代码 跟 使用common pool做连接池的代码,我发现common pool做得更好,因为他连org.csource.fastdfs.StorageClient1 都缓存了,而你的代码是new 出来的。。

httpclient.zip

536.54 KB, 下载次数: 866

commonpool做的连接池

论坛徽章:
0
5 [报告]
发表于 2014-08-28 11:09 |只看该作者
chinesejie1990 发表于 2014-06-17 14:12
我对比了 你的代码 跟 使用common pool做连接池的代码,我发现common pool做得更好,因为他连org.csource.f ...


正在使用

论坛徽章:
0
6 [报告]
发表于 2015-07-02 15:41 |只看该作者
回复 5# sdandroid

你在使用的什么连接池啊?


   

论坛徽章:
0
7 [报告]
发表于 2015-12-01 11:10 |只看该作者
回复 1# zhanghua1199
很好
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP