Jetty服务器上的多个连接器

时间:2012-02-27 22:32:30

标签: java jetty embedded-jetty

我正在尝试运行Jetty Server,可以让很多人连接到服务器并查看打印输出列表。我希望每个连接的人看到打印出的相同值。

例如,如果我有一个列表跟踪时间,我希望5个人能够访问我的网站(例如localhost:8080 / time)并让他们看到每个人的时间30秒,我怎么设置它?

我有什么:

  • 我正在使用Jetty。
  • 我创建了一个绑定到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();
         }
    }

 }

因此列表对象是我每隔30秒唤醒(即通知)的Main类中定义的静态ArrayList。希望这有助于某人了解我正在谈论的内容,因为我不确定我可以在处理程序中更改...

1 个答案:

答案 0 :(得分:0)

您如何将客户送入您的处理程序?浏览器对特定主机的连接数量有限制,可能是您看到的。

除了在处理程序中看到的通常奇怪的事情之外,处理程序代码没有任何本质上的错误