gpt4 book ai didi

spring - Spring 中使用 STOMP 的多个房间

转载 作者:行者123 更新时间:2023-12-04 02:50:04 27 4
gpt4 key购买 nike

是否可以使用 STOMP 和 Spring 4 创建房间? Socket.IO 有内置房间,所以我想知道 Spring 是否有这个

我目前的代码:

@MessageMapping("/room/greet/{room}")
@SendTo("/room/{room}")
public Greeting greet(@DestinationVariable String room, HelloMessage message) throws Exception {
return new Greeting("Hello, " + room + "!");
}

最好有 @SendTo("/room/{room}")

但是,我仅限于:
@SendTo("/room/room1") 
@SendTo("/room/room2")
@SendTo("/room/room3")

等等......这是非常非常不理想的

客户是:
stompClient.subscribe('/room/' + roomID, function(greeting){
showGreeting(JSON.parse(greeting.body).content);
});

其中 roomID 可以是房间 1、房间 2 或房间 3...
如果我想要更多房间怎么办?现在感觉好痛

最佳答案

看起来这个“房间”特性实际上是一种发布/订阅机制,这是通过 Spring Websocket 支持中的主题实现的(参见 STOMP protocol support and destinations 了解更多信息)。

用这个例子:

@Controller
public class GreetingController {

@MessageMapping("/room/greeting/{room}")
public Greeting greet(@DestinationVariable String room, HelloMessage message) throws Exception {
return new Greeting("Hello, " + message.getName() + "!");
}

}

如果有消息发送到“/room/greeting/room1”,那么 Greeting 的返回值会自动发送到“/topic/room/greeting/room1”,所以初始目的地以“/topic”为前缀。

如果您想自定义目的地,可以使用 @SendTo就像你做的那样,或者像这样使用 MessagingTemplate:
@Controller
public class GreetingController {

private SimpMessagingTemplate template;

@Autowired
public GreetingController(SimpMessagingTemplate template) {
this.template = template;
}

@MessageMapping("/room/greeting/{room}")
public Greeting greet(@DestinationVariable String room, HelloMessage message) throws Exception {
Greeting greeting = new Greeting("Hello, " + message.getName() + "!");
this.template.convertAndSend("/topic/room/"+room, greeting);
}

}

我想快速浏览一下 the reference documentation和一些有用的例子,例如 portfolio appchat app应该是有用的。

关于spring - Spring 中使用 STOMP 的多个房间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28387157/

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