我想在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) {
}
}
我尝试连接到该网络套接字,但没有任何反应。我在互联网上看到了很多文章,但没有任何帮助。我不知道如何让它工作。
当我尝试连接到网络套接字时,没有任何反应。
春季启动版本:2.0.3
Websocket-API 版本:1.1
我也没有看到网络套接字的开放端口。
谢谢
BR
有点晚了,但以防有人来这里寻求解决方案。
Spring文档中没有介绍如何在Spring中使用Java WebSocket API(JSR-356(,尽管我花了几个小时在谷歌上搜索它,但我还是没有找到任何描述如何实现它的教程。
为了将Java WebSocket API与Spring一起使用,您应该使用classorg.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)
它完成了。您的注释类成为通常的 Spring 管理的组件,可用于@Autowired注入等。
希望它能帮助某人:)
上。
应该提到的是,通过 SpringConfigurator 初始化 JSR 356 WebSocket仅在 .war 项目中受支持,这些项目将像通常的工件一样部署在 servlet 容器中。
当项目打包在可执行的 Spring Boot .jar 或 Spring Boot 可执行文件 .war 中时,它将无法按预期工作,并且当它通过 java -jar {app} 部署时,它将无法按预期工作
我没有设法找到一种方法来初始化JSR 356 WebSocket,并在可执行存档的Spring Boot环境中使用@Autowired Spring组件。
可以通过ServerEndpointExporter.setAnnotatedEndpointClasses(...(部署JSR 356 WebSocket,但是提供的每个类都必须有一个no-arg构造函数,否则将抛出异常。 在这种情况下,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();
}
}
这是一篇完整的文章。