Stomp SockJs客户端+服务器Spring

时间:2017-01-12 11:26:47

标签: spring websocket npm stomp sockjs

我有一个spring boot应用程序,我使用npm和webpack。我想启动一个websocket来从服务器向客户端发送一些消息。我的服务器是用java构建的,客户端用javascript使用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');

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

2 个答案:

答案 0 :(得分:1)

尝试替换:

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

使用:

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

答案 1 :(得分:0)

你没有@MessageMapping(“/ sockjs-client”)在控制器上。 尝试使用此注释以及@sendUser注释。