gpt4 book ai didi

java - WebSocketHandler 和 WebSocketServlet 的区别

转载 作者:行者123 更新时间:2023-12-01 11:51:28 25 4
gpt4 key购买 nike

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

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

谢谢。

最佳答案

这 2 个选择反射(reflect)了人们在为 Jetty 编写应用程序时使用的 2 种基本技术。

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

有许多内置处理程序提供了组织处理程序的机制。作为这种类型的一个例子(冰山一角),您可以通过使用 HandlerList 拥有超过 1 个处理程序。 ,将处理程序包装在 HandleWrapper 中要具有基于请求详细信息的可选行为,请指定上下文,然后使用 ContextHandler ContextHandlerCollection 里面等等(有太多的组合无法在 StackOverflow 上的答案中列出)

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

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

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

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

关于java - WebSocketHandler 和 WebSocketServlet 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28792991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com