2015-05-13 24 views
5

Próbuję utworzyć serwer, który powiadamia klientów połączonych po wystąpieniu zmian. Do tego używam Spring Boot dla serwera. W celu dostarczenia powiadomień, każdy klient ustanawia gniazdo z serwerem. Użyłem tego przewodnika: https://spring.io/guides/gs/messaging-stomp-websocket/ i działa idealnie. W tym przykładzie klient wysyła wiadomość przez gniazdo, a serwer odpowiada.Spring Boot + Websocket (SockJS)

  1. Problem polega na tym, że nie mogę znaleźć sposobu, w jaki serwer wysyła wiadomość do klienta bez konieczności wysyłania wiadomości przez klienta!
  2. Czy można wyświetlić listę wszystkich podłączonych gniazd internetowych?

Dziękuję

Odpowiedz

6

moje odpowiedzi:

  1. Klient nie musi wysłać wiadomość, ale trzeba połączyć i subskrybować. Robię to sam w aplikacji, w której przeglądarka łączy się i subskrybuje, a następnie zaczyna wysyłać wiadomości. Po stronie serwera można Autowire Service (lub inny komponent) z obiektem SimpMessagingTemplate, a następnie użyć rodziny funkcji convertAndSend do wysyłania rzeczy do konkretnego użytkownika lub wszystkich subskrybentów. Jeśli sprawdzisz numer the portfolio project, zobaczysz, jak to się robi w temacie price.stock. Klient łączy się i subskrybuje, a serwer ma zaplanowane zadanie do wysłania do niego. Ta usługa używa obiektu MessageSendingOperations, ale można użyć SimpMessagingTemplate, jak wspomniano powyżej. Mam ten kod w naszym serwisie aplikacji:

    @Autowired 
    private SimpMessagingTemplate messagingTemplate; 
    
    ... 
    messagingTemplate.convertAndSendToUser(userId, destination, jsonMessage); 
    
  2. This question ma jakieś dobre informacje na znalezieniu wszystkich użytkowników. Wygląda na to, że musisz użyć zdarzeń zdefiniowanych w Spring documentation on STOMP context events, aby śledzić rzeczy samodzielnie, jeśli chcesz. Zasadniczo, ponieważ jest to model subskrypcji, nie trzeba wiedzieć, kto jest podłączony. Możesz także stworzyć własny temat, w którym wysyłasz prośbę do wszystkich klientów, aby odpowiedzieli na nie i szukali ich. Sam tego nie zrobiłem, ale Rossen (jeden z komentatorów) jest jednym z głównych autorów projektu, więc mu wierzę!

Mam nadzieję, że to pomoże. Daj mi znać.