如何使用 Jetty 11 在 Dropwizard 4 中设置 WebSocket 支持?

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

我目前正在使用 Jetty 11 开发 Dropwizard 4 项目,但在设置 WebSocket 支持时遇到问题。以前的建议建议使用 https://github.com/LivePersonInc/dropwizard-websockets 但这似乎已经过时了。我发现的所有建议都使用 JettyWebSocketServletContainerInitializer 类,我在我拥有的任何依赖项中都找不到它。我正在使用 dropwizard guicy,但我认为这在这里没有任何效果。

当前依赖项:

<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-server</artifactId>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-servlet</artifactId>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty.websocket</groupId>
    <artifactId>websocket-jakarta-server</artifactId>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty.websocket</groupId>
    <artifactId>websocket-jetty-server</artifactId>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty.websocket</groupId>
    <artifactId>websocket-jetty-api</artifactId>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty.websocket</groupId>
    <artifactId>websocket-jakarta-common</artifactId>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty.websocket</groupId>
    <artifactId>websocket-core-server</artifactId>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty.websocket</groupId>
    <artifactId>websocket-core-common</artifactId>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty.websocket</groupId>
    <artifactId>websocket-jetty-client</artifactId>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty.websocket</groupId>
    <artifactId>websocket-jetty-common</artifactId>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty.websocket</groupId>
    <artifactId>websocket-servlet</artifactId>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty.websocket</groupId>
    <artifactId>websocket-server</artifactId>
    <version>9.4.56.v20240826</version>
</dependency>
<dependency>
    <groupId>jakarta.websocket</groupId>
    <artifactId>jakarta.websocket-api</artifactId>
    <version>2.1.1</version>
</dependency>

所有没有版本的都使用11.0.20。我意识到我不需要所有这些依赖项,如果您能让我知道我缺少什么以及我需要哪些依赖项,那就太好了。我尝试过各种版本来尝试让它工作,但我显然错过了一些东西。

应用程序中设置的一小段代码会非常有帮助。

java websocket jetty dropwizard
1个回答
0
投票

这个项目帮助了我:https://github.com/TomCools/dropwizard-websocket-jsr356-bundle

如果您使用 Guice 进行 DI,您需要添加一个配置器:

  ServerEndpointConfig serverEndpointConfig = ServerEndpointConfig.Builder.create(MyWebsocketServer.class,
                                                                                    "/my-ws-enpoint")
            .configurator(new GuiceConfigurator())
            .build();

class GuiceConfigurator extends ServerEndpointConfig.Configurator {
        @Override
        public <T> T getEndpointInstance(Class<T> endpointClass) throws InstantiationException {
            return injector.getInstance(endpointClass);
        }
    }

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