最近、FTP 接続のタイムアウトの短縮に関する質問を投稿しました (必要に応じて、ここをクリックして参照してください)。
ここで、FTP ダウンロードに使用しているコンポーネントに焦点を当てた、より具体的な質問を投稿するよう求められました。
Nico Kreipke の FTPManager を使用しています (ここをクリックして GitHub に移動します)。
私たちが実装しようとしているのは、FTP アドレスからデータをダウンロードすることです。それが失敗した場合は、HTTPS Web サーバーを使用するようにフォールバックします。
提供した FTP アドレスが使用できない場合、タイムアウトまでに約 1 分かかります。
問題は、どうすればそのタイムアウトを短縮できるかということです。
敬具、
ティアゴ
追加情報
言い忘れていましたが、FTP 接続は IP (ローカル ネットワーク) で行われます。
ヨハンのヒント
double
という名前のプロパティを FTPManager に追加しましたtimeout
。
次にserverReadStream
、読み取りストリームを保持するために FTPManager 全体で使用されるプロパティである のアクセサをオーバーライドし、すべてのリクエストのタイムアウト間隔を設定しました。
- (NSInputStream *)serverReadStream
{
return _serverReadStream;
}
- (void)setServerReadStream:(NSInputStream *)serverReadStream
{
if ((_serverReadStream = serverReadStream)) {
CFNumberRef number = CFNumberCreate(kCFAllocatorDefault, kCFNumberDoubleType, &_timeout);
CFReadStreamSetProperty((__bridge CFReadStreamRef)(_serverReadStream), _kCFStreamPropertyReadTimeout, number);
CFRelease(number);
}
}
_kCFStreamPropertyReadTimeout
によって定義されます。
#define _kCFStreamPropertyReadTimeout CFSTR("_kCFStreamPropertyReadTimeout")
ただし、タイムアウトにはまだ約 1 分かかります。を作成した直後、FTPアドレスに接続する前にタイムアウトを設定しましたftpManager
。タイムアウトを設定するために使用するコードは次のとおりです。
FTPManager *ftpManager = [[FTPManager alloc] init];
[ftpManager setTimeout:10];