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