FTPClient池-Java

FTPClient池-Java,java,multithreading,connection-pooling,ftp-client,apache-commons-net,Java,Multithreading,Connection Pooling,Ftp Client,Apache Commons Net,我正在编写一个Rest服务,它连接到FTP服务器以读取一些文件,然后对读取的数据执行一些操作以服务于服务请求。我正在使用Apache commonsFTPClient 作为一个临时解决方案,我正在数据访问层中创建一个FTPClient对象,然后将其连接起来,然后使用凭据登录到一个方法中(该方法的客户端是本地的,因为FTPClient不是线程安全的),然后在退出该方法之前将其断开(即读取文件后)。问题是,FTPClient需要3-7秒的时间才能登录,这非常高。因此,我正在考虑实现一个FTPClie

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

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

是否已经存在这样的客户端池

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

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


感谢和问候

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

以下是一些更不明显的客户端参数:

  • soTimeout-确定客户端阻止消息等待的时间。通常,您每隔一段时间轮询一个套接字,这决定了您在轮询期间等待的时间
  • soLinger-确定在调用close()后保持连接的时间
从我使用FTP的经验来看,如果连接关闭,它们通常只会重新连接-与其他应用程序不同,保持持续不间断的连接通常并不重要


你使用FTP的目的是什么?它通常不是一个时间紧迫的服务…

至于客户端池,我碰巧写了一个演示项目。

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


testOnBorrow=true

你好,Philip,谢谢你的回复。正如我提到的,我的REST服务中的数据访问层与FTP服务器进行对话。时间对我来说非常重要,如果不是太关键的话。