2012-02-29 15 views
0

AJAXリクエストをSOAPサーバーに転送するプロキシのようなページを作成しようとしています。 ブラウザは10秒ごとに2つのリクエストを同じページ(クエリ文字列の異なるserver.php)に送信します。 サーバーは、クエリ文字列に応じてSOAPサーバーにSOAP呼び出しを行います。 すべて正常に動作しています。php soapクライアントを使用すると奇妙なタイムアウト動作が発生する

次に、私はsoapサーバーに遅い応答をシミュレートするためにスリープ状態にして、呼び出し元にタイムアウトをかけて数秒後に呼び出しを中止します。

server.php: Pseudo code: 

$timeout = 10; 
ini_set("default_socket_timeout", $timeout); 

$id = $_GET['id']; 

$wsdl= 'http://soapserver/wsdl' 
$client = new SoapClient($wsdl,array('connection_timeout'=> $timeout)); 
print($client->getQuote($id)); 

ブラウザがhttp://myserver/server.php?id=IBM 要求にAJAXリクエストを送信した場合

は私が設定したタイムアウト後に停止します。 最初の通話が停止する前に2番目の通話を試みると、2番目の通話はタイムアウトを考慮しません。

PHP SOAPを使用せず、代わりにカールを使用しようとしましたが、同じ結果が得られました。

http://myserver/server.php?id=IBM 
http://myserver/server.php?id=AAP 
http://myserver/server.php?id=MSX 

最初のものは、10秒、20秒後の第二と30秒後の第3の後に停止します。

は、私も自分のブラウザ上で3つのタブを開いて、呼び出そうとしました。

これは正常な動作ですか、何か不足していますか?あなたは、おそらくセッションを開始している

答えて

0

事前に おかげで、とsession_start()ブロックその他の要求は、セッションを「解放」するまで、それまでの2回目の呼び出し(つまり:終了し、もはやセッションに任意のデータを書き込むことはありません) 。時間のかかるリクエストの場合は、セッションが必要ない場合はセッションを開始しないでください。セッションが必要な場合は、必要なデータをすべて取得してから、session_write_close()に電話をかけてください。後でセッションに書き込む必要がある場合は、session_start()に再度電話するだけです。

関連する問題