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



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

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

应该在相同的端口上提供两个不同的连接。

我遵循旧文章如何创建嵌入式WebSocket服务器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();

但是我只在第二个上下文中得到数据。这是正确的实现吗?

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

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

你的问题是,你只能有一个处理程序在Jetty 8服务器类,因为,没有addHandler。

处理程序是一个包装类,它们可以像套娃一样配置。这是创建一个处理程序集合(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();

相关内容

  • 没有找到相关文章

最新更新