簡體   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