簡體   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