Commons Net FTPClientが読み取りをブロックするのを検出または防止する
-
20-09-2019 - |
質問
私はコモンズネットを使用しています FTPClient
FTPサイトを定期的に投票し、ファイルをダウンロードしようとするクラス。時折、サイトから読み込もうとすると、スレッドが無期限にブロックしていることがあり、他の誰かがこの問題に遭遇し、回避策を提供できるのではないかと思いましたか?
私は使用しています FTPClient
's retrieveFileStream(String)
入力ストリームにハンドルを取得する方法。それから読みます。以下は、ブロックされたスレッドの部分的なスタックトレースです。
"FTP File Poll Thread" prio=10 tid=0x083b0800 nid=0x6324 runnable [0x65b5b000..0x65b5beb0]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
- locked <0x5c851928> (a java.io.BufferedInputStream)
at java.io.FilterInputStream.read(FilterInputStream.java:66)
at java.io.PushbackInputStream.read(PushbackInputStream.java:122)
at org.apache.commons.net.io.FromNetASCIIInputStream.__read(FromNetASCIIInputStream.java:75)
at org.apache.commons.net.io.FromNetASCIIInputStream.read(FromNetASCIIInputStream.java:170)
at java.io.FilterInputStream.read(FilterInputStream.java:116)
解決 2
私がここで使用したKludgeは、FTP操作がx秒より時間がかかった場合にアラートを上げるためにタスクをスケジュールすることでした。私は実際に見つけました Javanioftp SourceForgeでは、私の状況では、クライアントを切り替える際の開発オーバーヘッドは保証されません。
他のヒント
java.ioはブロックしているので、java.nioパッケージを使用する必要があります。 java.nioでFTPを使用したことはありませんが、HTTPがjava.nioで動作できるため、機能する必要があると仮定します。
よろしく
所属していません StackOverflow