Konfigurieren der timeout auf JSch ChannelSftp Operationen
Ich bin mit JSch Bibliothek auflisten und herunterladen von Dateien von einem SFTP-server.
Channel channel = this.session.openChannel(SFTP_CHANNEL_NAME);
channel.connect();
sftpChannel = (ChannelSftp) channel;
Vector listing = sftpChannel.ls("*");
Beim Aufruf ls
-, Anwendungs-thread ist, stecken manchmal.
Thread-dump -
Thread 15108: (state = BLOCKED)
java.lang.Object.wait(long) @bci=0 (Compiled frame; information may be imprecise)
java.io.PipedInputStream.read() @bci=142, line=310 (Compiled frame)
java.io.PipedInputStream.read(byte[], int, int) @bci=43, line=361 (Compiled frame)
com.jcraft.jsch.ChannelSftp.fill(byte[], int, int) @bci=17, line=2527 (Compiled frame)
com.jcraft.jsch.ChannelSftp.header(com.jcraft.jsch.Buffer, com.jcraft.jsch.ChannelSftp$Header) @bci=12, line=2553 (Interpreted frame)
com.jcraft.jsch.ChannelSftp.ls(java.lang.String) @bci=298, line=1424 (Interpreted frame)
Gibt es eine Möglichkeit zum konfigurieren der timeout auf ls
und andere Methoden? Ich sah timeout auf channel.connect(timeout)
aber dies stellt nur die Zeitüberschreitung beim herstellen einer Verbindung zu remote-server.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den richtigen Weg zu tun verhindern, dass Sie Befehle von kleben ist, um serverAliveInterval auf der Sitzung. Aus dem sourcecode:
Überprüfung der
jsch
source-code, es sieht nicht wie es möglich ist. Aber es ist open-source-nach alle, Sie sollte in der Lage sein, diese umzusetzen. Werfen Sie einen Blick auf die Initialisierung der streams inChannelSftp.start
. Sie können die hack-in Ihre eigene Implementierung mit einstellbaren timeouts.Obwohl javadoc sagt in millis, ich denke, dass seine arbeiten sogar in Sekunden.
https://epaul.github.io/jsch-documentation/simple.javadoc/com/jcraft/jsch/Session.html#setServerAliveInterval-int-
Dieser code wie erwartet funktioniert und das timing in 3 Sekunden
setServerAliveInterval
interpretiert, wie angegeben, in der Dokumente, die in Millisekunden.