繁体   English   中英

在 Spring Boot 应用程序中使用 Java Websocket API

[英]Use Java Websocket API in Spring Boot application

我想在 Spring Boot 应用程序中使用 java websocket API。 我创建了以下类,如下所述: https : //www.baeldung.com/java-websockets

import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;

@ServerEndpoint(value = "/test")
public class FrontendEndpoint {

        @OnOpen
        public void onOpen(Session session) throws IOException {
                session.getBasicRemote().sendText("Test");
        }

        @OnMessage
        public void onMessage(Session session, String message) throws IOException {
        }

        @OnClose
        public void onClose(Session session) throws IOException {
        }

        @OnError
        public void onError(Session session, Throwable throwable) {
        }
}

我尝试连接到该 websocket,但没有任何反应。 我在互联网上看到了很多文章,但没有任何帮助。 我不知道如何让它工作。

当我尝试连接到 websocket 时什么也没发生。

Spring Boot 版本:2.0.3

Websocket-API 版本:1.1

我也没有看到 websocket 的开放端口。

谢谢

BR

有点晚了,但以防万一有人来这里寻求解决方案。

Spring 文档中没有介绍如何在 Spring 中使用 Java WebSocket API (JSR-356),尽管我花了几个小时在谷歌上搜索它,但我还是没有找到任何描述如何实现它的教程。

为了在 Spring 中使用 Java WebSocket API,您应该使用类 org.springframework.web.socket.server.standard.SpringConfigurator: https : //docs.spring.io/spring/docs/current/javadoc-api/index.html ?org/springframework/web/socket/server/standard/SpringConfigurator.html来自

<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-websocket</artifactId>
   <version>...</version>
</dependency>

只需将其添加到您的

@ServerEndpoint(... configurator = SpringConfigurator.class) 

它完成了。 您的带注释的类成为@Autowired 注入等通常合法的 Spring 管理组件。

希望它可以帮助某人:)

更新。

应该提到的是,仅在 .war 项目中支持通过 SpringConfigurator 进行的 JSR 356 WebSocket 初始化,这些项目将作为 servlet 容器中的常规工件进行部署。

当项目打包在可执行的 Spring Boot .jar 或 Spring Boot 可执行文件 .war 中并且通过 java -jar {app} 以独立模式部署时,它不会按预期工作

我没有设法在可执行存档中的 Spring Boot 环境中找到一种方法来初始化带有 @Autowired Spring 组件的 JSR 356 WebSocket。

可以通过ServerEndpointExporter.setAnnotatedEndpointClasses(...)部署 JSR 356 WebSocket,但提供的每个类都必须有一个无参数构造函数,否则将抛出异常。 在这种情况下,Spring不会处理@Autowired 字段。

我曾经使用 Spring Boot 和 Websocket API 创建了一个示例应用程序

https://github.com/simasch/spring-boot-websocket

但问题是 ServerEndpoint 不是由 Spring 管理的,而是由 Websocket 实现管理的。 所以这可能不是你应该在 Spring Boot 中使用 websockets 的方式。

我建议看看 Spring 如何认为应该使用 Websockets: https : //docs.spring.io/spring/docs/current/spring-framework-reference/web.html#websocket

如果要在 Spring Boot 应用程序中使用 java websocket API,则必须将其添加到 spring 配置中

@Configuration
public class WebSocketConfig {

    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }

}

这是一篇完整的文章

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM