SimpUserRegistry.getUsers() — пустые веб-сокеты ⇐ JAVA
-
Гость
SimpUserRegistry.getUsers() — пустые веб-сокеты
Я пытаюсь реализовать уведомления на веб-сайте с помощью веб-сокетов. Я настроил конфигурацию сервера и отправку сообщений. Мой клиент получает мои сообщения и отображает страницу, но когда я пытаюсь получить список пользователей, подключенных к сокету, я получаю пустой список.
Моя конфигурация:
@Configuration @RequiredArgsConstructor @EnableWebSocket @EnableWebSocketMessageBroker публичный класс WebSocketConfig реализует WebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker (конфигурация MessageBrokerRegistry) { config.enableSimpleBroker("/topic", "/user"); config.setApplicationDestinationPrefixes("/app"); } @Override общественный недействительный RegisterStompEndpoints (реестр StompEndpointRegistry) { реестр.addEndpoint("/ws") .setAllowedOriginPatterns("*"); } } Мой контроллер Rest для отправки сообщения:
@RestController @CrossOrigin("*") @RequiredArgsConstructor @RequestMapping("/уведомления") общественный класс NotificationController { частный окончательный NotificationService NotificationService; @PostMapping("/все") public void sendNotificationToAll(@RequestBody String message) { NotificationService.sendToAll (сообщение); } @PostMapping("/пользователь") public void sendNotificationToUser(@RequestBody String message) { NotificationService.sendToUsers (сообщение); } @GetMapping("/getUser") общественная недействительность getUsers () { NotificationService.getUsers(); } } Сервис для отправки сообщений в тему:
@Service @RequiredArgsConstructor общественный класс NotificationService { частный окончательный SimpMessagingTemplate simpMessagingTemplate; частный окончательный SimpUserRegistry simpUserRegistry; public void sendToAll (Строковое сообщение) { System.out.println(сообщение); simpMessagingTemplate.convertAndSend("/topic/public", message); } public void sendToUsers (String message) { Listusers = List.of("полное имя какого-то пользователя"); simpMessagingTemplate.convertAndSendToUser(users.get(0), "queue/private", message); } общественный недействительный getUsers () { List userNames = simpUserRegistry.getUsers().stream().map(SimpUser::getName).toList(); simpUserRegistry.getUsers().forEach(System.out::println); } } Пытался отправить уникальное имя клиента при подключении, не помогло. Я использую клиент SockJs для js.
Я пытаюсь реализовать уведомления на веб-сайте с помощью веб-сокетов. Я настроил конфигурацию сервера и отправку сообщений. Мой клиент получает мои сообщения и отображает страницу, но когда я пытаюсь получить список пользователей, подключенных к сокету, я получаю пустой список.
Моя конфигурация:
@Configuration @RequiredArgsConstructor @EnableWebSocket @EnableWebSocketMessageBroker публичный класс WebSocketConfig реализует WebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker (конфигурация MessageBrokerRegistry) { config.enableSimpleBroker("/topic", "/user"); config.setApplicationDestinationPrefixes("/app"); } @Override общественный недействительный RegisterStompEndpoints (реестр StompEndpointRegistry) { реестр.addEndpoint("/ws") .setAllowedOriginPatterns("*"); } } Мой контроллер Rest для отправки сообщения:
@RestController @CrossOrigin("*") @RequiredArgsConstructor @RequestMapping("/уведомления") общественный класс NotificationController { частный окончательный NotificationService NotificationService; @PostMapping("/все") public void sendNotificationToAll(@RequestBody String message) { NotificationService.sendToAll (сообщение); } @PostMapping("/пользователь") public void sendNotificationToUser(@RequestBody String message) { NotificationService.sendToUsers (сообщение); } @GetMapping("/getUser") общественная недействительность getUsers () { NotificationService.getUsers(); } } Сервис для отправки сообщений в тему:
@Service @RequiredArgsConstructor общественный класс NotificationService { частный окончательный SimpMessagingTemplate simpMessagingTemplate; частный окончательный SimpUserRegistry simpUserRegistry; public void sendToAll (Строковое сообщение) { System.out.println(сообщение); simpMessagingTemplate.convertAndSend("/topic/public", message); } public void sendToUsers (String message) { Listusers = List.of("полное имя какого-то пользователя"); simpMessagingTemplate.convertAndSendToUser(users.get(0), "queue/private", message); } общественный недействительный getUsers () { List userNames = simpUserRegistry.getUsers().stream().map(SimpUser::getName).toList(); simpUserRegistry.getUsers().forEach(System.out::println); } } Пытался отправить уникальное имя клиента при подключении, не помогло. Я использую клиент SockJs для js.
Мобильная версия