Spring:向websocket客户端发送消息 [英] Spring: send message to websocket clients

查看:176
本文介绍了Spring:向websocket客户端发送消息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在建立一个使用Spring Boot,RabbitMQ和WebSocket作为POC的网络聊天,但我最后一点:WebSockets

我希望我的ws客户端连接到特定的端点,比如 / room / {id} 当新邮件到达时,我希望服务器将响应发送给客户端,但我搜索了类似的东西,但没有找到。

I'm building a webchat with Spring Boot, RabbitMQ and WebSocket as POC, but I'm stucked a the last point: WebSockets
I want my ws clients to connect to a specific endpoint, like /room/{id} and when a new message arrives, I want the server to send the response to clients, but I searched for something similar and didn't found.

目前,当消息到达时,我使用RabbitMQ进行处理,例如

Currently, when the message arrives, I process it with RabbitMQ, like

container.setMessageListener(new MessageListenerAdapter(){
            @Override
            public void onMessage(org.springframework.amqp.core.Message message, Channel channel) throws Exception {
                log.info(message);
                log.info("Got: "+ new String(message.getBody()));
            }
        });

我想要的是,而是记录它,我想将它发送给客户端,例如: websocketManager.sendMessage(new String(message.getBody()))

what I would like is, instead log it , I want to send it to the client, for example: websocketManager.sendMessage(new String(message.getBody()))

推荐答案

好的,我想我明白了,对于每个需要它的人来说,这就是答案:

Ok, I think I got it, for everyone who needs it, here is the answer:

首先,你需要在pom.xml中添加WS依赖项

first, you need to add WS dependencies to the pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-messaging</artifactId>
</dependency>

创建WS端点

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        // the endpoint for websocket connections
        registry.addEndpoint("/stomp").withSockJS();
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/");

        // use the /app prefix for others
        config.setApplicationDestinationPrefixes("/app");
    }

}

注意:我正在使用STOMP ,所以客户应该像这样连接

Note: I'm using STOMP, so the clients should connect like this

<script type="text/javascript">
    $(document).ready(function() {
        var messageList = $("#messages");
        // defined a connection to a new socket endpoint
        var socket = new SockJS('/stomp');
        var stompClient = Stomp.over(socket);
        stompClient.connect({ }, function(frame) {
            // subscribe to the /topic/message endpoint
            stompClient.subscribe("/room.2", function(data) {
                var message = data.body;
                messageList.append("<li>" + message + "</li>");
            });

        });
    });
</script>

然后,你可以简单地用你的组件连接ws messenger

Then, you can simply wire the ws messenger on your components with

@Autowired
private SimpMessagingTemplate webSocket;

并发送消息

webSocket.convertAndSend(channel, new String(message.getBody()));

这篇关于Spring:向websocket客户端发送消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆