Несколько разъемов на сервере Jetty - PullRequest
0 голосов
/ 28 февраля 2012

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

Например, если у меня есть один список, отслеживающий время, и я хочу, чтобы примерно 5 человек могли заходить на мой веб-сайт (например, localhost: 8080 / time), и чтобы они все видели, который час каждый 30 секунд, как бы я это настроить?

Что у меня есть:

  • Я использую причал.
  • Я создал один сервер, связанный с портом 8080.
  • Я создал свой собственный обработчик, расширяющий AbstractHandler
    • это выводит на экран сообщение о том, когда произошло событие (т.е. прошло 30 секунд)
  • Если к этой странице подключаются два человека, каждый из них видит распечатку каждую минуту (то есть она переключается назад и вперед, сообщая каждому человеку, когда произошло любое другое событие)
  • Если подключено 3 человека, только двое могут оставаться на связи, а третий просто вращается, не выводя на экран

Я не устанавливал свои собственные соединители, так как мои попытки сделать это не увенчались успехом, и я не уверен, как я понимаю, если это решение моей проблемы.

Любая помощь будет принята с благодарностью, и если у кого-то есть какие-то идеи, но мне нужны пояснения относительно того, что я делаю, я был бы рад предоставить более подробную информацию.

Спасибо!

Код обработчика:

@Override
public void handle(String target, Request request, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException, ServletException
{

httpServletResponse.setContentType("text/html;charset=utf-8");
httpServletResponse.setStatus(HttpServletResponse.SC_OK);

request.setContextPath("/time");
request.setHandled(true);

while (true) {

    synchronized(Main.list) {
         while (!Main.list.isEmpty()) {
              Double time = Main.list.get(0);
              httpServletResponse.getWriter().println("<h1>The time now is " + time + "</h1>"); 
              httpServletResponse.flushBuffer();    
              Main.list.remove(0);
         }
         try {
              Main.list.wait();
         } catch (InterruptedException e) {
              e.printStackTrace();
         }
    }

 }

Таким образом, объект списка - это статический ArrayList, определенный в классе Main, который я просыпаюсь (т.е. уведомляю) каждые 30 секунд. Надеюсь, это поможет кому-то лучше понять, о чем я говорю, так как не уверен, что могу изменить в обработчике ...

1 Ответ

0 голосов
/ 06 марта 2012

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

нет ничего плохого в том, что код обработчика, кроме того, что он вообще странный, видеть в обработчике

...