【问题标题】:FTPClient Pool - JavaFTPClient 池 - Java
【发布时间】:2013-02-14 13:57:10
【问题描述】:

我正在编写一个连接到 FTP 服务器以读取一些文件的 Rest Service,然后对读取的数据执行一些操作以服务于服务请求。我正在使用 Apache commons FTPClient

作为一个临时解决方案,我正在创建一个 FTPClient 对象 - 然后连接它 - 然后使用凭据登录 - 在方法内(客户端是此方法的本地 - 这样做是因为 FTPClient 不是线程安全)在我的数据访问层中,然后在退出方法之前断开它(即..在读取文件之后)。问题是,FTPClient 登录需要大约 3-7 秒,这非常高。所以我正在考虑实现一个FTPClientPool,它可以在数据访问方法中提供一个已经准备好的客户端。

是否已经存在任何此类 ClientPools?

如果是,那我应该选择哪一个?

如果不是,实现的困难是一旦创建和连接,apache FTPClient 能存活多久?无限时间?? (我的意思是 FTPClient 的默认保持活动时间是多少 - 客户端断开连接之后的空闲时间 - 因为我在 java 文档中看到了各种时间。:() 接下来的问题是你如何让它始终保持活动状态??(可能是在一个单独的线程中定期发送 NOOPS ??)任何关于我应该如何前进的帮助真的很有帮助。

感谢和问候

【问题讨论】:

    标签: java multithreading connection-pooling ftp-client apache-commons-net


    【解决方案1】:

    客户端的空闲超时通常由服务器端确定。

    下面是一些比较不明显的客户端参数:

    • soTimeout - 确定客户端阻塞等待消息的时间。通常,您会每隔一段时间轮询一次套接字,这决定了您在轮询期间等待的时间。
    • soLinger - 确定在调用 close() 后保持连接的时间。

    根据我使用 FTP 的经验,它们通常会在连接关闭时重新连接 - 与其他应用程序不同,保持不间断的连接通常并不重要。

    您使用 FTP 做什么 - 通常不是时间关键的服务...

    【讨论】:

    • 嗨菲利普,感谢您的回复。正如我所提到的 - 我的 REST 服务中的数据访问层与 FTP 服务器对话。时间对我来说非常重要,如果不是太重要的话。
    【解决方案2】:

    至于ClientPools,正好写了一个demo项目。 commons-pool-ftp

    我对 ftp 协议有点恼火, 根据我们的经验,在刚刚从池中获取的客户端上进行测试时,它会遇到broken pipe

    testOnBorrow=true

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-21
      • 2016-11-22
      • 1970-01-01
      • 2010-10-05
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 2013-09-05
      相关资源
      最近更新 更多