[英]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.