私の Catalyst アプリでは、SOAP with WSDL を使用してリモート サーバーへの非常に重要な接続を行っています。
すべて正常に動作しますが、何らかの理由でリモート サーバーがダウンすると、すべてのアプリがタイムアウトになるまで待機します。すべての。すべてのコントローラーとプロセス、すべてのクライアント!!
SOAP LITE トランスポート エラーのタイムアウトを 15 秒に設定すると、すべてが 15 秒待機します。タイムアウト待機中は、どのユーザーまたは接続からのページも表示できません。
Catalyst アプリには Fast CGI と Ngnix を使用しています。待機中に複数のfcgiプロセスを使用すると、他の人が接続を処理しますが、それらすべてが障害のあるSOAPサービスにアクセスしようとすると...タイムアウトに達するまで、すべて待機して応答を待ちます。それらのすべてが待機している場合、それ以上の接続は許可されません。
SOAP::LITE が「シングルスレッド」であることをどこかで読んだ答えを探しています。
本当ですか?すべての訪問者が1 つのSOAP 接続しか使用できないということですか? 信じがたいです。
これは呼び出しのための私のコードです:
sub check_result {
my ($self, $code, $IP, $PORT) = @_;
my $soap = SOAP::Lite->new( proxy => "http://$IP:$PORT/REMOTE_SOAP
+");
$soap->autotype(0);
$soap->default_ns('http://REMOTENAMESPACE/namespace/default');
$soap->transport->timeout(15);
$soap-> on_fault(sub { my($soap, $res) = @_;
eval { die ref $res ? $res->faultstring : $soap->transport->st
+atus };
return ref $res ? $res : new SOAP::SOM;
});
my $som = $soap->call("remote_function",
SOAP::Data->name( 'Entry1' )->value( $code ),
);
return $som->paramsout;
}
perlmonks で親切に提案されたこのわずかに異なるアプローチも試しましたが、何も良くなりませんでした
誰かが私を正しい方向に向けることができますか?
ミグ