Spring 中的多个房间使用 STOMP
Multiple rooms in Spring using STOMP
是否可以使用 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 可以是 room1、room2 或 room3...
如果我想要更多房间怎么办?现在感觉好痛
看起来这个 "room" 功能实际上是一个 publish/subscribe 机制,通过 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”,那么return值Greeting会自动发送到“/topic/room/greeting/room1”,所以初始目的地以“ /主题".
如果您想自定义目的地,您可以像以前一样使用 @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 and some useful examples, such as a portfolio app and a chat app 应该会有用。
是否可以使用 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 可以是 room1、room2 或 room3... 如果我想要更多房间怎么办?现在感觉好痛
看起来这个 "room" 功能实际上是一个 publish/subscribe 机制,通过 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”,那么return值Greeting会自动发送到“/topic/room/greeting/room1”,所以初始目的地以“ /主题".
如果您想自定义目的地,您可以像以前一样使用 @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 and some useful examples, such as a portfolio app and a chat app 应该会有用。