是否可以使用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 ...... 如果我想要更多房间怎么办?现在感觉就像这样的痛苦
答案 0 :(得分:19)
看起来像这样"房间" feature实际上是一个发布/订阅机制,是在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 app和chat app应该很有用。