サーバー側が遅すぎる場合は、例外をスローして意味のあるエラー メッセージをクライアントに送り返すという態度を取りたいと思います。この制限時間は任意に 5 秒に設定しており、必要に応じて微調整します。
App Engine にはApiProxy.getCurrentEnvironment().getRemainingMillis()
、a がスローされてタイムアウトになるまでの残りのミリ秒数が示されていることがDeadlineExceedException
わかります。
私は似たようなことをしたいと思っていますが、GAE の 60 秒の制限よりも独自の 5 秒の制限を課しています (繰り返しますが、今のところ、5 秒と 40 秒のどちらを選択しても、それらがより厳しいものであれば問題ありません) GAE が課すものよりも)。5 秒のタイマーを開始するサーバー側のハンドラー/サーブレットを作成したいと思います。リクエストがその時間内に返されない場合、例外がスローされ、クライアントに返されます。
public class MyTimedServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
// Start 5-second timer
Timer timer = new Timer(5000);
try {
timer.start();
response = handleRequest(request);
}
catch(TimeException timerException) {
response = ResponseFactory.newTimeExceededResponse();
}
}
}
Timer
残念ながら、探しているオブジェクトに似たものは GAE API にありません。
を介してすべてのリクエストをマルチスレッド化することをすでに計画しているので、絶対に必要でない限り、バックグラウンドの「タイマースレッドThreadManager.currentRequestThreadFactory().newRequestThread(...)
」を作成するためにこれらのスレッドの1つを無駄にしたくありません(一度に10個しか取得できません!)。
だから私は尋ねます: GAE は箱から出してすぐにこのようなものを持っていますか? また、自分でロールバックする必要がある場合、どうすればそれを行うことができますか? 前もって感謝します!