在Jetty Embedded in Karaf中定义Websocket



我正在使用Apache Karaf 4.0.7创建一个服务器应用程序,该应用程序使用Websockets与客户端应用程序通信以发送/接收数据。我想为已经在Karaf中运行的嵌入式Jetty服务器定义一个Websockets端点。

以下是BundleActivator中用于定义Websockets端点的代码。这段代码有效,允许我建立连接,但捆绑包无限期地挂在"正在启动"状态。

public void start(BundleContext bundleContext) throws Exception {
Server server = new Server();
ServerConnector connector = new ServerConnector(server);
connector.setPort(8080);
server.addConnector(connector);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
server.setHandler(context);
try
{
// Initialize javax.websocket layer
ServerContainer wscontainer = WebSocketServerContainerInitializer.configureContext(context);
// Add WebSocket endpoint to javax.websocket layer
wscontainer.addEndpoint(UserWebsocketResource.class);
server.start();
server.dump(System.err);
server.join();
}
catch (Throwable t)
{
t.printStackTrace(System.err);
}
}

我想知道问题是否是我正在创建一个新的Jetty服务器,而server.start()正在创建正在运行的线程,并且不允许捆绑包达到"活动"状态?目前关于使用Jetty/Karaf的文档很少,而且我还增加了使用OSGI捆绑包的复杂性。

有没有更好的方法将websocket与嵌入式Jetty一起使用?我需要修改Karaf/etc中的PAX文件并添加新的连接器吗?对于一个刚开始的工程师来说,所有这些交互技术都很难驾驭!请并感谢你的帮助。

在上面的例子中,您通过server.join()挂起激活器,这就是为什么bundle处于Starting阶段。

我认为下面的例子足够好,可以看看如何将websocket添加到捆绑包中:https://github.com/ops4j/org.ops4j.pax.web/tree/master/samples/karaf-websocket

最新更新