繁体   English   中英

Stomp SockJs 客户端 + 服务器 Spring

[英]Stomp SockJs client + server Spring

我有一个 spring boot 应用程序,我使用 npm 和 webpack。 我想启动一个 websocket 将一些消息从服务器发送到客户端。 我的服务器是用 java 构建的,客户端是用 stomp 和 sockjs 构建的。 这是我的代码: 客户:

    socket = new SockJS('/myWebSocketEndPoint');
    stompClient = Stomp.over(socket);
    stompClient.connect("","", function (frame) {
            console.log('Connected: ' + frame);
            stompClient.subscribe('/topic/notification', function (notificationBody) {
                  alert(angular.fromJson(notificationBody.body).content);
    });
  });
}

服务器:配置:

    @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("/myWebSocketEndPoint").withSockJS();
    }
}

控制器:

    @SendTo("/topic/notification")
    public String sendToMenuItems(String menuItem)  {
          return menuItem;
    }

问题是:当我想运行我的应用程序时,它不会使用 websocket 进行升级(似乎服务器不工作,或者客户端找不到服务器)。 因此,升级请求仍处于待处理状态。 如果我使用:

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/sockjs-client").withSockJS();
    }

    socket = new SockJS('/sockjs-client');

升级有效,但无法连接和订阅。 为什么如果我使用第二个配置,我的应用程序(部分)可以工作,而如果我使用第一个配置却不行? 非常感谢

尝试更换:

stompClient.connect("","", function (frame) {
...

与:

stompClient.connect({}, function (frame) {
...

您在控制器上没有@MessageMapping(“ / sockjs-client”)。 尝试将此注释与@sendUser注释一起使用。

我不得不使用setAllowedOriginPatterns来使这个设置工作

@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("/live");
        registry.addEndpoint("/live").setAllowedOriginPatterns("*").withSockJS();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM