3

私は、Jersey HTTP サーバーと、REST 要求用の Jersey クライアントを使用しています。

クライアントはサーバーにファイルを送信し、サーバーはファイルを処理してクライアントに応答を返します。私の問題は、サーバーでの処理に数分、場合によっては 1/2 時間かかることです。

リクエストが失敗したか、レスポンスで成功したかをクライアントに知らせたい。ただし、クライアントの readTimeout を 60 秒に設定したのは、それを 0 に設定するのは悪い習慣だと読んだためです。その結果SocketTimeoutException、クライアントで が発生することがあります。

readTimeout を無効にする (0 に設定する) ことは安全ですか? connectTimeout は 10 秒のままです。

あるいは、TCP キープアライブを使用できますか? 私が理解しているように、これはこれらのパケットを数十分の大きな間隔でのみ送信します(OSによって異なります)。

処理が成功した場合、トークンを使用してすぐに戻り、トークンを使用してサーバーをポーリングする代わりに、他にできることはありますか? ハートビート パケットについてどこかで読んだことがあります。これは使えますか?

4

1 に答える 1

1

明らかに、タイムアウトを高く設定しすぎてはなりません。スレッドが待機し続けるためです。いくつかのリクエストがあると、多くのスレッドが待機したままになり、サーバーのジャミングアップにつながります。

代わりに、サーバーをポーリングしてリクエストの準備ができているかどうかを確認したくない場合は、リクエストに何らかの識別子を含め、対応する準備ができたらサーバーに応答を返させることをお勧めします識別子が含まれている場合、クライアント側でリクエストとレスポンスを照合します。

于 2013-09-24T14:47:29.550 に答える