从 Spring Boot Web 应用程序中的 Web 套接字获取数据

Posted

技术标签:

【中文标题】从 Spring Boot Web 应用程序中的 Web 套接字获取数据【英文标题】:Get data from a web socket in a Spring Boot web application 【发布时间】:2017-01-22 06:04:43 【问题描述】:

我是 Spring Boot 和 Websockets 的新手。 我对 Java 很熟悉,并且读过一些关于 Websockets 和 Spring Boot 框架的东西。 我需要与 Web 套接字通信并在现有的 Spring Boot Web 应用程序中获取数据。 谁能让我知道我可以从哪里开始以及任何好的在线资源?我做了谷歌,但大部分例子我很难在短时间内掌握。如果可能的话,也从概念上向我解释一下。

提前致谢

【问题讨论】:

【参考方案1】:

在 Spring Boot 中创建一个基本的 websocket 应用程序 你需要:

- 首先,启用 Websocket 支持,例如使用:

@Controller
public class GreetingController 


    @MessageMapping("/hello")
    @SendTo("/topic/greetings")
    public Greeting greeting(HelloMessage message) throws Exception 
        Thread.sleep(1000); // simulated delay
        return new Greeting("Hello, " + message.getName() + "!");
    


- 其次,创建一个消息处理控制器:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer 

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) 
        config.enableSimpleBroker("/topic");
        config.setApplicationDestinationPrefixes("/app");
    

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) 
        registry.addEndpoint("/gs-guide-websocket").withSockJS();
    


- 创建浏览器客户端

function connect() 
    var socket = new SockJS('/gs-guide-websocket');
    stompClient = Stomp.over(socket);
    stompClient.connect(, function (frame) 
        setConnected(true);
        console.log('Connected: ' + frame);
        stompClient.subscribe('/topic/greetings', function (greeting) 
            showGreeting(JSON.parse(greeting.body).content);
        );
    );

我想你可以从这个例子开始,https://spring.io/guides/gs/messaging-stomp-websocket/

【讨论】:

如何匿名向客户端发送数据。我的意思是即使客户端不通过WebSocket发送任何数据,如何通过WebSocket从服务器端向客户端发送数据?【参考方案2】:

查看我对类似问题的回答: SockJS Java Client Implementation for non-web application

在其中,您可以找到能够发送/接收 websocket 数据的客户端示例。

【讨论】:

以上是关于从 Spring Boot Web 应用程序中的 Web 套接字获取数据的主要内容,如果未能解决你的问题,请参考以下文章

dockerized 环境中的 Keycloak 和 Spring Boot Web 应用程序

Tomcat中的spring-boot应用程序战争部署,现有的spring web应用程序失败

我可以使用 REST Web 服务和 Spring Boot 将 servlet 中的应用程序转换为 Spring 吗?

从Spring MVC 到 Spring BOOT的简化道路

IntelliJ 中的 Gradle Spring Boot 应用程序无法识别 WEB-INF 文件夹中的 Web 资源

如何保护 Spring Boot Web 应用程序中的 REST API?