java - 如何使用同一端口拥有具有多个上下文的 websocket(使用 jetty 8)

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

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

即使我成功了,我也有最终的要求,我必须动态打开/创建上下文,即在使用第一个上下文启动服务器后。

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

最佳答案

您的问题是 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();

关于java - 如何使用同一端口拥有具有多个上下文的 websocket(使用 jetty 8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22327094/

相关文章:

java - 使用 WildFly 8 的简单 REST API

java - 从 List<Object> 中删除多个范围的元素

node.js - 将 Websocket 流量从 Nginx 代理到 Socket.io(无 SSL)

java - Jetty Websocket 服务器在本地工作,但远程连接失败并出现 "Host is down"错误,如何解决?

Java泛型通配符: if something wants ? extends T,T有什么问题?

java - 为什么 hadoop 输出文件 part-r-00000 是空的

node.js - 测量 websocket 性能的工具

python - 如何阻止我的 websocket 连接关闭?

grails - STS2.6 grails错误:无法识别的Windows套接字错误:10106:创建

java - Jetty 应该位于哪个目录中?