gpt4 book ai didi

java - 更改 websocket 范围(从应用程序到 session / View )

转载 作者:行者123 更新时间:2023-12-03 11:19:34 24 4
gpt4 key购买 nike

我用教程创建了一个基本的网络套接字。
这是一个配置:

@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("/chat");
registry.addEndpoint("/chat").withSockJS();
}
}
这是消息处理 Controller :
@MessageMapping("/chat")
@SendTo("/topic/messages")
public OutputMessage send(Message message) throws Exception {
return new OutputMessage("Hello World!");
}
一切正常,但从我的调查来看,默认情况下 WebSockets 看起来有一个应用程序范围(通过连接到 channel ,我可以看到来自所有用户的所有调用)。
我想要做的是只能看到来自当前用户 session 或当前 View 的调用。
关于如何应用这些配置的任何想法?

最佳答案

我能够解决这个难题,所以我将与您分享我的发现。
首先,我发现一个简单的内存消息代理无法处理的信息:

    /*
* This enables a simple (in-memory) message broker for our application.
* The `/topic` designates that any destination prefixed with `/topic`
* will be routed back to the client.
* It's important to keep in mind, this will not work with more than one
* application instance, and it does not support all of the features a
* full message broker like RabbitMQ, ActiveMQ, etc... provide.
*/
但这具有误导性,因为它可以通过 @SendToUser 轻松实现。注解。
另外,重要的是现在在客户端,您需要添加一个额外的前缀 /user/在订阅 channel 时,解决方案是:
  • 在服务器端:更改 @SendTo("/topic/messages")进入 @SendToUser("/topic/messages") .
  • 客户端:/topic/messages/user/topic/messages .
  • 关于java - 更改 websocket 范围(从应用程序到 session / View ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65631229/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com