java - Websocket 与 Spring mvc、stomp、sockjs、Angular JS

标签 java angularjs sockets spring-mvc stomp

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

有人可以帮我吗,先谢谢了!!

最佳答案

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

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

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

您的 Controller 将如下所示:

@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() + "!");
    }

}

看一下注释 - 这些确实是该 Controller 与普通 REST Controller 的区别。

您的配置如下所示 - 再次查看注释 - 特别是“@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();
    }
}

也看看这个很棒的资源:https://spring.io/guides/gs/messaging-stomp-websocket/

关于java - Websocket 与 Spring mvc、stomp、sockjs、Angular JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43815564/

相关文章:

linux - 为什么 TCP/IP 速度取决于发送数据的大小?

java - Camel netty组件: Failed to create selector

macos - 如何在 Cocoa 套接字中发送格式良好的 HTTP 响应?

java - GAE 中的集合问题

java - bashrc 不识别 java 主目录

java - BigInteger modInverse 不适用于检查为可逆的数字

javascript - AngularJS 部分 HTML 无法使用 jquery lib(在 index.html 中加载)

c# - 将值从 CodeBehind 传递到 Angularjs 变量

javascript - 如何从指令 angularjs 调用另一个指令

返回 12 小时格式的 Java 日历小时