使用 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/