phonegap と jquerymobile を使用して webworks アプリケーションを開発しています。soapclient.js を使用して、バックエンド サーバーへの SOAP リクエストを作成します。タイムアウトの問題に直面しており、詳細な調査中に、11 番目の ajax リクエストが一貫して応答しないことに気付きました。物事を適切な場所に配置するために、特定のリクエストが機能することを確認できるように、同じ呼び出しを繰り返してテストを繰り返しました。
ローエンドの自己作成 xmlhttprequest オブジェクトを使用し、send() 呼び出しまでエラーはありません。onreadystate 変更リスナーは、11 回目の呼び出しでは呼び出されません。
時折、十分に長く待っていたときに、この 11 回目の呼び出しが約 5 分ほどで受け入れられ、BlackBerry ブラウザフィールドで接続リークが発生していると思われました。
10接続(非並列)が限界かと思います。BB ガベージ クリーンアップがトリガーされると、いくつかの古い接続がクリアされ、キューで待機している新しい接続が実行されます。
より詳しい情報
- サーバーログから、この待機期間中にサーバーがリクエストを受信しなかったことを確認しました
- Wi-Fi を使用しているか GPRS を使用しているかに関係なく、これが発生することを確認しました。
- アプリケーションを閉じて再度開くと、アプリケーションは再び機能し始めますが、最初の 10 件のリクエストまでのみです。
リクエストがタイムアウト期間を過ぎると、abort() を呼び出して null に設定して、リクエストを中止しようとしました。それでも、しばらく待たないと11回目の依頼はできません。
この動作がランダムだった場合、JavaScriptがUIスレッドを待機しているなどの他の理由を信じていたでしょう。しかし、11 回目のリクエストでは 99% 再現可能であり、コードを何度も再チェックして、アプリから通知される変数またはカウントがあるかどうかを確認しました。アラートは .send まで正常に機能しますが、コールバックは呼び出されません。
私は現在、この動作が私のアプリに固有のものなのか、それともプラットフォームの制約なのかを確認するために ajax 呼び出しを行う非常に単純なアプリを作成しようとしていますが、そのような以前の経験がある場合は共有してください。