如何使用相同的端口使用多个上下文的websockets(使用jetty 8)

时间:2014-03-11 13:26:21

标签: java websocket jetty jetty-8

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

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

应提供两个不同的连接,但在同一端口上。

我已经按照旧文章How do I create an embedded WebSocket server Jetty 9?创建了上下文处理程序。

我尝试在下面的代码中创建两个单独的上下文

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();

但我只在第二个上下文中获取数据。这是正确的实施吗?

即使我让它工作,我也有最终要求,我必须在运行中打开/创建上下文,即在启动具有第一个上下文的服务器之后。

有人可以解释如何使用单一端口实现这些要求吗?

1 个答案:

答案 0 :(得分:0)

你的问题是你只能在Jetty 8 Server Class中有一个处理程序,因为没有addHandler。

处理程序是一个包装类,它们可以像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();