Реализация потока на запрос в сервлете HTTP Streaming

Я использую сервлет HTTP Streaming для доставки push-уведомлений клиенту. В этом контейнере также есть сервис JEST JAX-RS.

Проблема в том, что когда я открываю поток в двух окнах браузера, мне приходится ждать, пока другой запрос не будет выполнен.

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

И я пытался использовать AsyncContext, но он не потоковый, он позволяет одновременно открывать вкладки браузера и в конце выполнения потока доставляет весь контент в браузер.

Также я попытался одновременно открыть образец JSP-страницы в двух вкладках браузера и получил похожий результат.

    <HTML>
    <HEAD>
       <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
       <meta http-equiv="Pragma" content="no-cache">
    </HEAD>
    <BODY BGCOLOR="blue" TEXT="white">
    <% 
      try {
        for (int i=1; i < 100; i++) {
           out.print("<h1>"+i+"</h1>");
           out.flush();

           try {
                Thread.sleep(1000);
           } catch (InterruptedException e) {
                out.print("<h1>"+e+"</h1>");
           }
         }
       } catch (Exception e) {
           out.print("<h1>"+e+"</h1>");
       }
       out.print("<h1>DONE</h1>");
    %>
    </BODY>
    </HTML>

В качестве сервера я использую Apache Tomcat 7.0. Но использовать другой контейнер сервлетов не будет проблемой.

Есть указатели?

Спасибо

1 ответ

Выполнение собственного управления потоками из контейнера сервлета почти никогда не является хорошей идеей.

Чтобы узнать о продвижении сервера в Tomcat, смотрите здесь: http://tomcat.apache.org/tomcat-7.0-doc/aio.html

Вы уверены, что опрос на стороне клиента будет проще?

Другие вопросы по тегам