我正在使用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);
}
}
实际差异是什么,最好的方法是什么?
感谢。
答案 0 :(得分:1)
这两个选项反映了人们在为Jetty编写应用程序时使用的两种基本技术。
WebSocketHandler
是组织网络应用程序的更基本的处理程序技术的一部分。这些处理程序非常基础,代表了Jetty中请求处理的基本构建块。从本质上讲,服务器只有1个处理程序(aka Server.setHandler(Handler)
)。
有许多内置处理程序可以提供组织处理程序的机制。作为这种变体(冰山一角)的一个例子,你可以使用HandlerList
包含多个处理程序,在HandleWrapper
中包装处理程序以根据请求详细信息提供可选行为,指定Context& #39;然后在ContextHandler
等内部使用ContextHandlerCollection
。(在StackOverflow的答案中有太多的组合布局)
WebSocketServlet
是组织Web应用程序的更高级别方法,完全在Servlet规范和标准中配置。完成所有标注的注释,过滤器,听众,行为等。
人们通常选择一种技术或另一种技术。两者都有能力,就像表现一样。两者都不是更好的选择。
通常明智的做法是选择一种技术而不是另一种技术,并坚持使用该技术进行整个webapp,因为混合这两种行为是棘手的,并且充满了意外行为的地雷。
注意:从架构上讲,Servlet层本身是一个Jetty Handler,可以通过ServletContextHandler
或WebAppContext
(它只是一个专门的ServletContextHandler)。