Java 使用嵌入式Jetty Web服务器从客户端获取大量消息

Java 使用嵌入式Jetty Web服务器从客户端获取大量消息,java,server,jetty,Java,Server,Jetty,我有一个项目,在这个项目中,服务器需要能够连接到大量客户机,接收来自客户机的观察消息,并将它们放入队列中。我当前的粗略实现使用了一个非常基本的处理程序,以文本形式获取客户端请求: public class JettyServer { public JettyServer() throws Exception { Server server = new Server(6558); ObservationHandler handler = new O

我有一个项目,在这个项目中,服务器需要能够连接到大量客户机,接收来自客户机的观察消息,并将它们放入队列中。我当前的粗略实现使用了一个非常基本的处理程序,以文本形式获取客户端请求:

public class JettyServer
{

    public JettyServer() throws Exception
    {
        Server server = new Server(6558);
        ObservationHandler handler = new ObservationHandler();
        server.setHandler(handler);

        server.start();
        server.join();

    } 

    public class ObservationHandler extends AbstractHandler
    {
        @Override
        public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException
        {
            String requestString = request.getReader().lines().collect(Collectors.joining(System.lineSeparator()));

            // code to add requestString to thread safe queue ...

            baseRequest.setHandled(true);
        }

    }
}

这允许我以文本形式获取客户端请求,但我不确定这是我应该怎么做的。是否有一种方法可以接收来自客户的信息,而不是以请求的形式?Jetty似乎非常关注服务器到客户端的事务,而不是相反。我以前使用过JettyWebSockets,但我不确定我在这里想要的客户端连接是否是断断续续的。是否有更好的服务器服务或Jetty实现来执行此操作?

为什么不创建一个servlet来检索数据并按您的意愿进行处理

只需创建一个扩展HttpServlet的类:

public class MyServlet extends HttpServlet
然后,重写
doGet
doPost
如下方法:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
    response.setContentType("text/html");
    response.setStatus(HttpServletResponse.SC_OK);
    response.getWriter().println("<h1>"+greeting+"</h1>");
    response.getWriter().println("session=" + request.getSession(true).getId());
}
}


有关更多详细信息,请查看

谢谢。我对这一切都很陌生,如果这是一个显而易见的答案,我很抱歉。doPost截获来自客户端的所有POST消息(发送到正确的URL)的说法正确吗
public class OneServletContext{
   public static void main(String[] args) throws Exception{
     Server server = new Server(8080);

     ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
     context.setContextPath("/");
     server.setHandler(context);

     context.addServlet(new ServletHolder(new HelloServlet()),"/*");
     context.addServlet(new ServletHolder(new HelloServlet("Buongiorno Mondo")),"/it/*");
     context.addServlet(new ServletHolder(new HelloServlet("Bonjour le Monde")),"/fr/*");

     server.start();
     server.join();
}