【问题标题】:Difference between WebSocketHandler and WebSocketServletWebSocketHandler 和 WebSocketServlet 的区别
【发布时间】:2015-03-01 11:27:24
【问题描述】:

我正在使用 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);
  }
}

实际区别是什么?最好的方法是什么?

谢谢。

【问题讨论】:

    标签: java websocket jetty


    【解决方案1】:

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

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

    有许多内置的处理程序提供了组织处理程序的机制。作为其中一些示例(冰山一角),您可以通过使用HandlerList 拥有多个处理程序,将处理程序包装在HandleWrapper 中以根据请求详细信息具有可选行为,然后使用@ 指定上下文987654323@ 在 ContextHandlerCollection 内,等等。(在 StackOverflow 上的答案中列出的组合太多)

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

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

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

    注意:从架构上讲,Servlet 层本身就是一个 Jetty 处理程序,通过ServletContextHandlerWebAppContext(它只是一个专门的 ServletContextHandler)。

    【讨论】:

    • 非常感谢您的解释
    猜你喜欢
    • 2012-12-07
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 2011-10-20
    • 2020-01-23
    • 1970-01-01
    相关资源
    最近更新 更多