java—如何使用同一端口(使用jetty 8)使WebSocket具有多个上下文

m0rkklqb  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(377)

我试图实现websocket服务器,要求在同一端口上有多个上下文,即。

ws://ip:8989/provider1
ws://ip:8989/provider2

应提供两个不同的连接,但在同一端口上。
我读了一篇老文章“如何创建嵌入式websocket服务器Jetty9”?创建上下文处理程序。
我尝试在下面的代码中创建两个独立的上下文

ContextHandler context = new ContextHandler();
context.setContextPath("/provider1");
context.setHandler(wsHandler);
server.addHandler(context);
ContextHandler context = new ContextHandler();
context.setContextPath("/provider2");
context.setHandler(wsHandler);
server.addHandler(context);
server.start();
server.join();

但我只得到第二个上下文的数据。这是正确的执行方式吗?
即使我让它工作,我有最终的要求,我必须打开/创建动态的上下文,即在启动服务器与第一个上下文。
有人能解释一下如何使用单端口实现这些要求吗?

nkhmeac6

nkhmeac61#

您的问题是在jetty8服务器类中只能有一个处理程序,因为没有addhandler。
处理程序是一个 Package 类,它们可以像matryoshka玩偶一样配置。这是创建一个处理程序集合(handlercollection)并将两个上下文处理程序放在这里。此类具有addhandler方法
代码如下

// Collection 
HandlerCollection hc = new HandlerCollection();

// First context
ContextHandler context = new ContextHandler();
context.setContextPath("/provider1");
context.setHandler(wsHandler);
hc.addHandler(context)

// Second context
ContextHandler context2 = new ContextHandler();
context2.setContextPath("/provider2");
context2.setHandler(wsHandler2);
hc.addHandler(context2)

server.setHandler(hc);
server.start();
server.join();

相关问题