【问题标题】:What is the meaning of different timeout properties of Apache FTPClient (and DefaultFtpSessionFactory in Spring)?Apache FTPClient(和 Spring 中的 DefaultFtpSessionFactory)的不同超时属性的含义是什么?
【发布时间】:2023-01-20 01:06:42
【问题描述】:

有以下用于 FTP 通信的超时属性:

  • 连接超时: 以毫秒为单位的连接超时,将传递给 Socket 对象的 connect() 方法
  • 默认超时:打开套接字时使用的默认超时(以毫秒为单位)
  • 数据超时:从数据连接读取时使用的超时时间(以毫秒为单位)

您能否向 Java/Kotlin 开发人员解释为什么要设置它们以及如果不设置它们会发生什么不好的事情?

添加一些上下文:我的服务器应用程序需要连接到 FTP 并列出/上传/下载/删除文件。我想确保我连接或传输文件的尝试不会永远挂起,以防出现问题。

【问题讨论】:

标签: java spring ftp spring-integration apache-commons


【解决方案1】:

AbstractFtpSessionFactory 中的所有这些属性都向下传播到 FTPClient

    if (this.connectTimeout != null) {
        client.setConnectTimeout(this.connectTimeout);
    }
    if (this.defaultTimeout != null) {
        client.setDefaultTimeout(this.defaultTimeout);
    }
    if (this.dataTimeout != null) {
        client.setDataTimeout(this.dataTimeout);
    }

connectTimeout 的默认值为 private static final int DEFAULT_CONNECT_TIMEOUT = 60000;。所以,错过它是可以的。是的,这个是我们在通过connect()创建Socket时使用的:_socket_.connect(new InetSocketAddress(host, port), connectTimeout);

defaultTimeout 向下传播到 _socket_.setSoTimeout(_timeout_);,这对套接字读取操作有影响。请参阅Socket.setSoTimeout()JavaDocs。是的,它的默认值是0。所以,也可以错过它的配置。

dataTimeout 用于在 ACTIVE_LOCAL_DATA_CONNECTION_MODE 中创建的服务器 Socket 用于类似的 setSoTimeout() 选项。默认值相同:0 - 无限等待读取操作应答。

我从 Apache Commons Net 源代码中获得了所有这些。

看起来这个项目本身并没有提供一些关于这个问题的文档:https://commons.apache.org/proper/commons-net/

所以,是的,一条经验法则:始终使用合理的值配置这些道具。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 2020-03-26
    • 2011-06-02
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多