繁体   English   中英

Apache FTPClient(和 Spring 中的 DefaultFtpSessionFactory)的不同超时属性的含义是什么?

[英]What is the meaning of different timeout properties of Apache FTPClient (and DefaultFtpSessionFactory in Spring)?

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

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

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

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

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 .netSocketAddress(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/

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM