SockJS over stomp 使用 angular2 和 spring boot

Posted

技术标签:

【中文标题】SockJS over stomp 使用 angular2 和 spring boot【英文标题】:SockJS over stomp using angular2 and spring boot 【发布时间】:2016-12-29 01:18:15 【问题描述】:

我想在我的项目中实现一个 websocket 来做一些通知

这是我的 projet spring boot 中的配置 web socket

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

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) 
        registry.addEndpoint("/hello").setAllowedOrigins("*").withSockJS();
    

在我的控制器中我有这个方法:

@MessageMapping("/hello")
    @SendTo("/topic/templatesWS")
    public void TemplatesWebSocket() 
        try 
            Thread.sleep(1000);
         catch (InterruptedException e) 
            e.printStackTrace();
        
        System.out.println("calling juste");
    

在我的客户端页面 index.html 中我添加了这个

<script src="//cdn.jsdelivr.net/sockjs/1/sockjs.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/stomp.js/2.3.3/stomp.js"></script>

在我的组件 angular2 中我正在使用这个

declare let SockJS;
        declare let Stomp;


        var socket = new SockJS('http://localhost:8080/hello');
        socket.ono
        var stompClient = Stomp.over(socket);
            stompClient.connect(, function(frame) 
            console.log('Connected: ' + frame);
            stompClient.subscribe('http://localhost:8080/template/topic/templatesWS', function(greeting) 
                console.log("from from", greeting);
            );
        , function (err) 
            console.log('err', err);
        );

如何调用 TemplatesWebSocket() 方法

【问题讨论】:

我认为 subscribe() 参数应该是简单的 '/topic/templatesWS' 事件后如何向服务器发送数据或获取对象? 我解决了这个错误我有一些配置 websocket 安全性阻止连接但是行代码 stompClient.subscribe 没有从控制器 TemplatesWebSocket() 调用该方法我该如何调用它 【参考方案1】:

查看我刚刚上传的这个例子: https://github.com/mtrojahn/spring-boot-websocket

我认为您的意思是向服务器发送命令并获得响应,对吧?上面的示例既涵盖了对客户端发送的命令的响应,也涵盖了定期发送给客户端的消息。

您可能正在寻找这样的东西:

stompClient.client.send("/app/somecommand", , "");

希望对你有帮助。

【讨论】:

send 方法可以正常工作,但是 stompClient.subscribe 不起作用为什么我们使用 subscribe 方法??当我们以预定的方法订阅时,例如每 20 秒获取一次数据,但如果您可以向我解释一下 MessageMapping,谢谢(我更新了问题,我添加了订阅方法错误的图片) Websockets 是关于订阅服务并等待数据。服务器将数据推送(广播)到所有订阅的客户端。 20 年代的例子表明,每隔 20 年代,您的客户就会收到一条消息。您的订阅方法未定义的问题听起来像是浏览器加载脚本的顺序问题。

以上是关于SockJS over stomp 使用 angular2 和 spring boot的主要内容,如果未能解决你的问题,请参考以下文章

春天的 websocket stomp over sockjs 重定向到 http 协议,而在关键的 web 服务中起源是 https

如何使用 spring+stomp+sockjs 获得 websocket 响应

stomp.js websocket广播模式

带有 Sockjs 和 Spring 4 但没有 Stomp 的 WebSocket

Websockets + SockJs:使用 stompclient 时,ConnectCallback 未在客户端执行

将 Spring websockets (sockJS + Stomp) 与基于令牌的身份验证 (JWT) 一起使用的最佳方法