ServletResponse.flushBuffer - 在我的响应发送之前它会阻塞吗?

时间:2013-06-05 07:44:37

标签: java tomcat

我正在使用Tomcat。 ServletResponse.flushBuffer的文档说,“强制将缓冲区中的任何内容写入客户端。对此方法的调用会自动提交响应,这意味着将写入状态代码和标题。” 但我无法弄清楚:在客户成功收到响应之前,我的doPost方法是否会被阻止此函数?如果连接时间很短,可能会ServletResponse.flushBuffer冻结线程吗?或者是异步执行交付?

我的目标是衡量客户看到响应所需的时间。我想在调用flushBuffer之前和之后测量时间,但我不确定这次是否涵盖了将消息传递到客户端套接字的所有过程。

此致 &安培; rzej

1 个答案:

答案 0 :(得分:1)

  

我的servlet会在此函数上被阻塞,直到客户端成功收到响应吗?

没有。 当前线程将被阻塞,直到整个响应写入套接字发送缓冲区。

  

如果连接时间很短,ServletResponse.flushBuffer可能会冻结servlet吗?

不,只有当前的帖子。

  

或者是异步执行交付吗?

是的,但必须首先缓冲响应,见上文。如果缓冲区因对等方未读取或数据尚未传递并确认而填满,则写入线程将阻塞,直到有足够的空间。