如何通过 Grizzly 定期发送 HTTP 状态代码 102 处理响应

Nat*_*han 6 java asynchronous http grizzly

我有一个在 Grizzly Web 服务器上运行的 Java 应用程序。Response.suspend()我已经在后台线程中调用并运行该请求。这非常有效。这是一些示例代码。

import org.glassfish.grizzly.http.server.Request;
import org.glassfish.grizzly.http.server.Response;

class Handler extends org.glassfish.grizzly.http.server.HttpHandler
{
   @Override
   public void service(Request request, Response response)
   {
       response.suspend();
       // Execute the request in a background thread
   }

   private static void execute(Request request, Response response)
   {
      // Process the request

      response.setStatus(200);
      // Populate the response headers and body
      response.resume();
   }
}
Run Code Online (Sandbox Code Playgroud)

对于一种请求,处理可能需要一段时间。我想102 Processing定期将 HTTP 状态代码发送回客户端,以便客户端不会超时。我该怎么做呢?我意识到我可能必须运行定期计划任务才能发送102 Processing. 这不是问题。我如何与Response对象交互?

我在处理请求时尝试了以下操作。这会将 102 HTTP 状态代码发送回客户端。但是,当实际响应准备好发送到客户端时,IllegalStateException会抛出 an ,因为它Response.isCommitted()是 true 。

response.setStatus(102, "Processing");

response.
   getOutputBuffer().
   acknowledge();
Run Code Online (Sandbox Code Playgroud)