FTP客户端池- Java

arknldoa  于 2022-12-21  发布在  Java
关注(0)|答案(3)|浏览(159)

我正在编写一个连接到FTP服务器读取一些文件的Rest服务,然后对读取的数据执行一些操作以满足服务请求。
作为一个临时的解决方案,我将在一个方法中创建一个FTPClient对象,然后连接它,再使用凭据登录(客户端位于此方法的本地-这样做是因为FTPClient不是线程安全的),然后在退出方法之前断开连接(即读取文件后)。问题是,FTPClient需要大约3 - 7秒的登录时间,这是非常高的。所以我正在考虑实现一个FTPClientPool,它可以在数据访问方法中提供一个已经准备好的客户端。
是否已存在任何此类客户端池?
如果是,我应该选择哪一个?
如果没有,实现的困难是一旦创建和连接,Apache FTPClient保持活动多久?无限时间??(我的意思是什么是FTPClient的默认保持活动时间-空闲时间后,客户端断开连接-因为我看到各种各样的时间在java文档.:()和下一个问题是你如何保持它始终活动??(可能是发送NOOPS后,定期间隔在一个单独的线程??)任何类型的帮助,我应该如何向前迈进真的很有帮助.
感谢与问候

gudnpqoy

gudnpqoy1#

客户端的空闲超时通常由服务器端确定。
下面是一些不太明显的客户端参数:

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

从我使用FTP的经验来看,它们通常只是在连接关闭时重新连接--与其他应用程序不同,拥有一个持续不间断的连接通常并不重要。
你用FTP做什么--它通常不是一个时间关键的服务......

mfuanj7w

mfuanj7w2#

至于ClientPools,我碰巧编写了一个演示项目。commons-pool-ftp
我对ftp协议有点恼火,根据我们的经验,在刚从池中获取的客户端上测试时,它会遇到 * 管道中断 *。
第一个月

cigdeys3

cigdeys33#

设定

protected static ThreadLocal<FTPClient> ftpClientContainer = new 
ThreadLocal<>();

然后用途:

//login() will be your login method to FTP:

ftpClientContainer.set(ftpLogin());

然后在每种方法中添加:

FTPClient ftpClient = ftpClientContainer.get();

并且在完成时精细:

//ftpDisconnect () will be your disconnect method to FTP:

ftpDisconnect(ftpClientContainer.get());

相关问题