簡體   English   中英

使用嵌入式Jetty Web服務器從客戶端獲取大量消息

[英]Get a large number of messages from clients using an embedded Jetty Web Server

我有一個項目,其中服務器需要能夠連接到大量客戶端,並從中接收觀察消息並將它們放入隊列中。 我當前的粗略實現使用一個非常基本的處理程序來獲取客戶端請求作為文本:

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實現來執行此操作?

為什么不僅僅創建一個可以檢索數據並根據需要對其進行處理的servlet?

只需創建一個擴展HttpServlet的類:

public class MyServlet extends HttpServlet

然后,重寫doGetdoPost方法,如下所示:

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());
}

在服務器配置中,還必須根據servlet偵聽的“路徑”將servlet添加到上下文中。 在以下示例中,有三個HelloServlet實例。 第一個偵聽每個路徑,第二個偵聽僅以“ / it”開頭的路徑,第三個偵聽以“ / fr”開頭的路徑:

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();
}

}

有關更多詳細信息,請查看https://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM