продолжения jetty 7

#java #jetty #continuations

#java #jetty #продолжения

Вопрос:

я использую jetty-7.4.1.v20110513 и servlet-api-2.5

я попытался использовать продолжения в следующем сервлете.

  import java.io.*;
 import java.util.*;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;

 import org.eclipse.jetty.continuation.*;



public class cs extends HttpServlet {

public void service(HttpServletRequest req, HttpServletResponse res)
throws java.io.IOException {

String reqId = req.getParameter("id");

Continuation cc = ContinuationSupport.getContinuation(req);

res.setContentType("text/plain");
res.getWriter().println("Request: " reqId "tstart:t" new Date());
res.getWriter().flush();

cc.setTimeout(2000);
cc.suspend();

res.getWriter().println("Request: " reqId "tend:t" new Date());
cc.complete();
}
}
  

Я ожидаю задержку в 2 секунды, но когда я запускаю сервлет из браузера, я получаю вывод следующим образом без какой-либо задержки:

 Request: null   start:  Sat May 21 15:25:02 IST 2011
Request: null   end:    Sat May 21 15:25:02 IST 2011
  

Ответ №1:

Я полагаю, вы читаете этот учебник. Задержка в 2 секунды может быть достигнута одним из этих способов:

  • Либо добавьте Thread.sleep(2000) перед вторым res.getWriter().println() .

  • Или удалить Continuation.complete() вызов, который заставит продолжение ждать максимальное время, указанное в Continuation.setTimeout() . Что происходит сейчас, так это то, что вы немедленно уведомляете, что ваше «вычисление» выполнено (посредством вызова cc.complete() )

Ответ №2:

Я, наконец, разобрался с api продолжений. следующий код сработал для меня. спасибо за вашу поддержку, ребята.

 import java.io.*;
import java.util.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.eclipse.jetty.continuation.*;

public class cs extends HttpServlet {

  public void doGet(HttpServletRequest req, HttpServletResponse res)
      throws java.io.IOException {

    String reqId = req.getParameter("id");

    Continuation cc = ContinuationSupport.getContinuation(req);

    res.setContentType("text/plain");
    res.getWriter().println("Request: "   reqId   "tstart:t"   new Date());
    res.getWriter().flush();

    cc.setTimeout(2000);
    cc.suspend();

    res.getWriter().println("Request: "   reqId   "tend:t"   new Date());
    if (cc.isInitial() != true) {
      cc.complete();
    }
  }
}
  

вывод:

 Request: null   start:  Sat May 21 15:25:02 IST 2011
Request: null   end:    Sat May 21 15:25:02 IST 2011
Request: null   start:  Sat May 21 15:25:04 IST 2011
Request: null   end:    Sat May 21 15:25:04 IST 2011