Я пытаюсь запустить Jetty Server, на котором несколько человек могут подключаться к серверу и просматривать список распечаток. Я хочу, чтобы все, кто подключается, видели распечатанные одни и те же значения.
Например, если у меня есть один список, отслеживающий время, и я хочу, чтобы около 5 человек могли перейти на мой веб-сайт (например, localhost: 8080 / время), и все они будут видеть, сколько сейчас времени, каждые 30 секунд, как бы мне это настроить?
Что у меня есть:
- Я использую Jetty.
- Я создал один сервер, привязанный к порту 8080.
- I created my own handler that extends AbstractHandler
- this writes to the screen saying when an event has transpired (i.e. 30 seconds have passed)
- Если два человека подключаются к этой странице, каждый из них видит распечатку каждую минуту (то есть она переключается взад и вперед, позволяя каждому узнать, когда произошло любое другое событие)
- Если подключатся 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 секунд. Надеюсь, это поможет кому-то лучше понять, о чем я говорю, поскольку я не уверен, что я могу изменить в обработчике ...