假设我正在将数据块写入HttpServletResponse
。因此,我的方法接收到一个字节数组,将其写入response.getOutputStream()
,然后释放线程。当我收到另一数据块时,我的方法将被唤醒,并将再次写入getOutputStream()
。最后,我调用AsyncContext.complete()
。
现在,WriteListener.onWritePossible()
规范说:
似乎当容器调用此方法时,我已经需要将响应缓冲在某个地方,因为onWritePossible()
可能再也不会被调用。因此,对于前面的示例,我需要将接收到的所有数据块都写入缓冲区(字节数组,如果缓冲区足够大,则可能是一个临时文件),并且如果在响应完成之前调用了onWritePossible()
,那我该怎么办?阻塞线程,直到获得所有响应数据?
最佳答案
在以下链接中检查代码。可能不是确切的解决方案,但可以为您的案例提供解决方案:
Servlet 3.1 Async IO Echo