2015-03-01 4 views
0

Я настраиваю обработчик WebSocket с помощью Jetty 9. Я видел примеры с помощью WebSocketHandler или WebSocketServlet.Разница между WebSocketHandler и WebSocketServlet

Вот что я делаю:

public class WebSocketServer{ 
    public WebSocketServer(){ 
    WebSocketHandler wsHandler = new WebSocketHandler() { 
     @Override 
     public void configure(WebSocketServletFactory factory) { 
     factory.register(MyWebSocketHandler.class); 
     } 
    }; 
    } 
} 

@WebSocket 
public class MyWebSocketHandler{...} 

Вот что они делают: (из http://www.eclipse.org/jetty/documentation/current/jetty-websocket-server-api.html)

@WebServlet(name = "MyEcho WebSocket Servlet", urlPatterns = { "/echo" }) 
public class MyEchoServlet extends WebSocketServlet { 

    @Override 
    public void configure(WebSocketServletFactory factory) { 
    factory.register(MyEchoSocket.class); 
    } 
} 

Какова реальная разница и что будет лучшим способом сделать это?

Спасибо.

ответ

1

Эти 2 варианта отражают 2 основных метода, которые люди используют при написании приложений для Jetty.

WebSocketHandler являются частью более фундаментальных Обработчики Техника организации веб-приложения. Эти обработчики очень просты и представляют собой основной строительный блок обработки запросов в Jetty. По сути, на сервере имеется только 1 обработчик (aka Server.setHandler(Handler)).

Есть много встроенных обработчиков, которые предоставляют механизмы для организации вашего обработчика (ов). В качестве примера некоторых из этих разновидностей (наконечник айсберга) у вас может быть более 1 обработчиков, используя HandlerList, обработчики переноса в HandleWrapper, чтобы иметь необязательное поведение на основе данных запроса, укажите контекст для использования ContextHandler внутри ContextHandlerCollection , и т. д. (с слишком большим количеством комбинаций для выкладки в ответе на StackOverflow)

WebSocketServlet - это способ более высокого уровня организации веб-приложения, полностью настраиваемого в спецификации и стандарте Servlet. В комплекте со всеми их стандартами аннотаций, фильтров, слушателей, поведения и т. Д.

Люди выбирают обычно одну технику или другую. Оба они так же способны, как и исполнители. Ни один из них не является лучшим выбором по сравнению с другим.

Обычно разумно выбирать одну технику над другой и придерживаться этой техники для всего вашего веб-приложения, так как смешивание двух поведений сложное и полное наземных мин неожиданного поведения.

Примечание: архитектурно говоря, Servlet слой сам по себе является Jetty Хэндлер, либо через ServletContextHandler или WebAppContext (который является только специализированным ServletContextHandler).

+0

Благодарим вас за разъяснения – Nala

Смежные вопросы