Configuration du délai d'expiration sur JSch ChannelSftp opérations
Je suis en utilisant JSch de la bibliothèque à la liste et de télécharger des fichiers depuis un serveur SFTP.
Channel channel = this.session.openChannel(SFTP_CHANNEL_NAME);
channel.connect();
sftpChannel = (ChannelSftp) channel;
Vector listing = sftpChannel.ls("*");
Tout en appelant ls
, l'application fil est coincé parfois.
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)
Est-il un moyen de configurer le délai d'expiration sur ls
et d'autres méthodes? J'ai vu paramètre de délai d'attente sur channel.connect(timeout)
mais cela ne définit le délai d'attente lors de la connexion à un serveur distant.
OriginalL'auteur vivek garg | 2013-05-14
Vous devez vous connecter pour publier un commentaire.
La manière correcte de le faire prévenir les commandes à partir de collage est de définir serverAliveInterval sur la session. À partir du code source:
OriginalL'auteur Andreas
La vérification de la
jsch
code source, il ne semble pas que ce soit possible. Mais il est open source après tout, vous devriez être en mesure de le mettre en œuvre. Jetez un oeil à l'initialisation de cours d'eau dansChannelSftp.start
. Vous pouvez pirater votre propre mise en œuvre avec des délais d'attente.OriginalL'auteur Martin Prikryl
Si javadoc dit dans millis, je pense que sa en fait de travail en quelques secondes.
https://epaul.github.io/jsch-documentation/simple.javadoc/com/jcraft/jsch/Session.html#setServerAliveInterval-int-
Ce code fonctionne comme prévu et le calendrier à 3 secondes
setServerAliveInterval
est interprété comme spécifié dans la documentation, dans millisecondes.OriginalL'auteur salish