在 Karaf 中嵌入的 Jetty 中定义 Websocket

问题描述 投票:0回答:1

我正在使用 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 包也增加了复杂性。

有没有更好的方法来使用带有嵌入式 Jetty 的 websocket?我需要修改 Karaf/etc 中的 PAX 文件并添加新的连接器吗?对于新手工程师来说,所有这些交互技术都很难驾驭!

embedded-jetty apache-karaf osgi-bundle java-websocket
1个回答
1
投票

在上面的示例中,您通过

server.join()
悬挂激活器,这就是捆绑包处于启动阶段的原因。

我认为以下示例足以了解如何将 websocket 添加到您的包中:https://github.com/ops4j/org.ops4j.pax.web/tree/master/samples/karaf-websocket

© www.soinside.com 2019 - 2024. All rights reserved.