WebSocketHandler和WebSocketServlet之间的区别

时间:2015-03-01 11:27:24

标签: java websocket jetty

我正在使用Jetty 9设置WebSocket处理程序。 我见过使用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 个答案:

答案 0 :(得分:1)

这两个选项反映了人们在为Jetty编写应用程序时使用的两种基本技术。

WebSocketHandler是组织网络应用程序的更基本的处理程序技术的一部分。这些处理程序非常基础,代表了Jetty中请求处理的基本构建块。从本质上讲,服务器只有1个处理程序(aka Server.setHandler(Handler))。

有许多内置处理程序可以提供组织处理程序的机制。作为这种变体(冰山一角)的一个例子,你可以使用HandlerList包含多个处理程序,在HandleWrapper中包装处理程序以根据请求详细信息提供可选行为,指定Context& #39;然后在ContextHandler等内部使用ContextHandlerCollection。(在StackOverflow的答案中有太多的组合布局)

WebSocketServlet是组织Web应用程序的更高级别方法,完全在Servlet规范和标准中配置。完成所有标注的注释,过滤器,听众,行为等。

人们通常选择一种技术或另一种技术。两者都有能力,就像表现一样。两者都不是更好的选择。

通常明智的做法是选择一种技术而不是另一种技术,并坚持使用该技术进行整个webapp,因为混合这两种行为是棘手的,并且充满了意外行为的地雷。

注意:从架构上讲,Servlet层本身是一个Jetty Handler,可以通过ServletContextHandlerWebAppContext(它只是一个专门的ServletContextHandler)。