Несколько комнат весной с использованием 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... Что если я хочу больше комнат? Сейчас ощущается такая боль
2 ответа
Похоже, что эта функция "комнаты" на самом деле является механизмом публикации / подписки, что достигается с помощью тем в поддержке Spring Websocket (дополнительную информацию см. В разделе " Поддержка протокола STOMP и пункты назначения").
С этим примером:
@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 /reeting/room1", то возвращаемое значение Greeting будет автоматически отправлено в "/ topic / room /reeting/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);
}
}
Я думаю, что беглый взгляд на справочную документацию и некоторые полезные примеры, такие как приложение для портфолио и приложение для чата, должны быть полезны.
Вы можете использовать netty socket для реализации socket io в java