如何使用WebSocket

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用WebSocket相关的知识,希望对你有一定的参考价值。

什么是WebSocket?看过html5的同学都知道,WebSocket protocol 是HTML5一种新的协议。它是实现了浏览器与服务器全双工通信(full-duplex)。HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽并达到实时通讯。现在我们来探讨一下html5的WebSocket 参考技术A 先装websocket服务器客户端【java】kaazingwebsocketgetway【python】mod_pywebsocket【javascript】node.js

如何使用 STOMP 从 Spring WebSocket 服务器向 WebSocket 客户端发送消息?

【中文标题】如何使用 STOMP 从 Spring WebSocket 服务器向 WebSocket 客户端发送消息?【英文标题】:How to send message to WebSocket client from Spring WebSocket server using STOMP? 【发布时间】:2020-02-24 14:46:23 【问题描述】:

我有两个使用 STOMP 的 Spring Boot WebSocket 应用程序:

    WebSocket 服务器 WebSocket 客户端

我能够从客户端发送 WebSocket 消息并从服务器响应它。但是,现在我想向客户端发送一个 WebSocket 消息,该消息由服务器端的事件触发。

有人能告诉我一个方法吗?

这是我现在在服务器端的内容:

WebSocketConfig.java:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer 

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

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) 
        registry.addEndpoint("/alarm");
    

WebSocketController.java:

@Controller
public class WebSocketController 

    @MessageMapping("/alarm")
    @SendTo("/topic/message") 
    public void processMessageFromClient(@Payload String message, Principal principal) throws Exception 

        System.out.println("WEBSOCKET MESSAGE RECEIVED" + message);
    

    @RequestMapping(value = "/start/alarmName", method = RequestMethod.POST)
    public String start(@PathVariable String alarmName) throws Exception 
        System.out.println("Starting " + alarmName);

        /* SEND MESSAGE TO WEBSOCKET CLIENT HERE */

        return "redirect:/";
    


【问题讨论】:

【参考方案1】:

我在official spring documentation找到了答案。

你只需要注入一个SimpMessagingTemplate

我的控制器现在看起来像这样:

@Controller
public class WebSocketController 

    private SimpMessagingTemplate template;

    @Autowired
    public WebSocketController(SimpMessagingTemplate template) 
        this.template = template;
    

    @MessageMapping("/alarm")
    @SendTo("/topic/message") 
    public void processMessageFromClient(@Payload String message, Principal principal) throws Exception 

        System.out.println("WEBSOCKET MESSAGE RECEIVED" + message);
    

    @RequestMapping(value = "/start/alarmName", method = RequestMethod.POST)
    public String start(@PathVariable String alarmName) throws Exception 
        System.out.println("Starting " + alarmName);

        this.template.convertAndSend("/topic/message", alarmName);

        return "redirect:/";
    


【讨论】:

以上是关于如何使用WebSocket的主要内容,如果未能解决你的问题,请参考以下文章

WebSocket原理及如何使用

如何在 XAMPP 服务器中使用 WebSocket

Golang如何使用websocket

如何使用 boost beast websocket 客户端收听 websocket 提要?

如何使用 cpprestsdk 设置 websocket SSL 连接?

如何使用 faye-websocket-ruby 向 websocket 客户端发送拒绝连接