にデータのチャンクを書き込んでいるとしましょうHttpServletResponse
。したがって、私のメソッドはバイト配列を受け取り、それを に書き込みresponse.getOutputStream()
、スレッドを解放します。データの別のチャンクを受け取ると、メソッドが起動され、getOutputStream()
再び書き込みが行われます。最後に、私は に電話しAsyncContext.complete()
ます。
さて、WriteListener.onWritePossible()
仕様には次のように書かれています:
このメソッドは、データの書き込みが初めて可能になったときにコンテナーによって呼び出されます。以下で説明する ServletOutputStream の isReady メソッドが false を返す場合にのみ、コンテナはその後 onWritePossible メソッドを呼び出します。
コンテナがこのメソッドを呼び出すとき、onWritePossible()
二度と呼び出されない可能性があるため、応答をどこかにバッファリングする必要があるようです。したがって、前の例では、受け取ったデータのすべてのチャンクをバッファー (バイト配列、またはバッファーが十分に大きい場合は一時ファイル) に書き込む必要がありonWritePossible()
、応答が完了する前に が呼び出された場合はどうすればよいですか?そうです?応答データがすべて揃うまでスレッドをブロックしますか?