【问题标题】:Define Websocket in Jetty Embedded in Karaf在 Karaf 中嵌入的 Jetty 中定义 Websocket
【发布时间】:2017-01-29 18:44:34
【问题描述】:

我正在使用 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】:

    在上面的示例中,您通过server.join() 挂起激活器,这就是捆绑包处于启动阶段的原因。

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

    【讨论】:

    • 太棒了!谢谢你提供信息。我在想我可以在 Karaf 的 jetty.xml 文件中添加一个连接器,但是没有任何关于如何以这种方式添加 Websocket 连接器的文档。
    猜你喜欢
    • 2015-06-24
    • 1970-01-01
    • 2012-08-01
    • 2014-01-06
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多