接続の作成には数回かかるので、複数のホストに接続したいので、複数のスレッドからJSchを使い始めました。複数のスレッドからJSchを使用する場合、どうすればいいですか
しかし、私はJSchがスレッドセーフではないので、私は思ったいくつかの厄介な例外が発生します。 JSchのスレッドセーフではないため、どのように使用すればよいのですか?
スタックトレース:私のテストで
com.jcraft.jsch.JSchException: connection is closed by foreign host
at com.jcraft.jsch.Session.connect(Session.java:269)
at com.jcraft.jsch.Session.connect(Session.java:183)
at com.ericsson.eea.ark.test.common.ssh.JschSshContext.session$lzycompute(JschSshContext.scala:64)
更新
私は同じホストに複数回接続されています。だから私は例外がある。
この例外は同時アクセスが原因ではないと私は考えています。むしろ、サーバが同じホストから頻繁に接続を試みることを拒否することです(かなり一般的です)。同じ瞬間に起動したいくつかのSSH/SFTPクライアントの複数の並列インスタンスを使用して接続しようとしましたか? –
スレッドセーフでない場合は、単一のスレッドからのみ使用でき、ほとんどのソケットクライアントは*論理的に*単一のスレッド操作を表します。 1つのJshインスタンスが1つの接続を表していますが、それを回避することはできません。 10接続は10インスタンスを意味します。 –
ああ、雑音のために申し訳ありません。私は、@ martyn-prikrylが前のコメントで書いた、私が考え出した:私は安いテストを持っていて、実際には同じホストに複数回接続しています。今では複数のホストに接続することに切り替えました.20台のホストに接続することをテストしましたが、例外なく動作します。あなたのヒントをありがとう。 – pihentagy