Несколько комнат весной с использованием 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

Другие вопросы по тегам