【问题标题】:Websocket with Spring mvc, stomp, sockjs, angular JS带有 Spring mvc、stomp、sockjs、angular JS 的 Websocket
【发布时间】:2017-10-04 13:29:44
【问题描述】:

通过 spring.io 提供的示例,http://www.baeldung.com/websockets-spring 有助于在客户端和服务器之间创建 websocket 连接,但我的情况是。 - 有人正在从 UI 创建消息,该消息传递给 Spring 控制器(单独的控制器)。 - 从这个控制器我需要通知/发送/广播这个消息给所有连接的客户端。 - 消息如何从接收消息的控制器传递给处理程序。 我还在这里推荐了WebSocket with Sockjs & Spring 4 but without Stomp 并发布了相同的问题。

谁能帮帮我,提前谢谢!!

【问题讨论】:

    标签: java angularjs sockets spring-mvc stomp


    【解决方案1】:

    我实际上也是为 Baeldung 写的,目前正在写一篇关于如何在 Spring 中为 websockets 添加安全性的小文章!您只需执行几个步骤即可让这一切正常运行!

    后端方面(既然你说UI已经完成或正在构建,我这里只关注后端),它实际上涉及三个部分:(1)必要的POJO,控制器和配置。

    您的 POJO 将非常简单 - 这里我们只使用 Greeting 和 Message 指定名称和基本文本数据类型(我将在此处跳过以节省空间,但您可以在下面的资源中看到它)。

    您的控制器将如下所示:

    @Controller
    public class GreetingController {
    
        @MessageMapping("/hello")
        @SendTo("/topic/greetings")
        public Greeting greeting(HelloMessage message) throws Exception {
            Thread.sleep(1000); // simulated delay
            return new Greeting("Hello, " + message.getName() + "!");
        }
    
    }
    

    看看注释 - 这些确实是这个控制器与普通 REST 控制器不同的地方。

    您的配置看起来像这样 - 再次查看注释 - 特别是 '@EnableWebSocketMessageBroker' - 和类 'AbstractWebSocketMessageBrokerConfigurer':

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

    也看看这个很棒的资源:@​​987654321@

    【讨论】:

    • 谢谢,我也是这样,我使用 2 个 websocket 端点(一个在同一个 Web 应用程序中,另一个在外部),我需要 2 个不同的证书吗?
    • 是的,如果两个 websocket 位于不同的域上,并且您想在两者上都提供 WSS(用于 websocket 的 SSL)!此外,您可能希望研究为两个端点提供安全覆盖(这意味着,如果您使用两个 Spring 应用程序,每个应用程序都有一个暴露的 WS 端点,那么每个都需要 Spring Security)。但是,根据您的设置方式,您可以使用相同的身份验证。
    • 感谢亚当,这是有道理的。由于我们有 2 个端点并使用相同的 sockJS 客户端,并且 sockJS 限制创建超过 2 个连接,我该如何继续,实际上我需要来自客户端的 3 个 sockJS 连接。
    • 如果您的客户端使用 Java:可能是这样的: List transports = new ArrayList(2); transports.add(new WebSocketTransport(new StandardWebSocketClient()));
    • 您可以将传输次数修改为 2+。老实说,我不确定是否使用 JavaScript,因为我认为默认情况下它没有上限。
    猜你喜欢
    • 2016-07-04
    • 2015-01-25
    • 2016-05-02
    • 2017-05-29
    • 2017-08-06
    • 2016-03-21
    • 2017-06-05
    • 2016-11-09
    • 2015-09-15
    相关资源
    最近更新 更多