Как я могу отправить запрос на отдых в сокет - PullRequest
0 голосов
/ 15 декабря 2018

Я пытался создать API, который отправляет запрос через сокет.

Код:

@Controller
public class GreetingController {
    @GetMapping("/x")
    public void send() {
        greeting(new HelloMessage("Admin", "bla"));
    }
    @MessageMapping("/hello")
    @SendTo("/topic/greetings")
    public Greeting greeting(HelloMessage message) {
        return new Greeting(HtmlUtils.htmlEscape(message.getName() + ": " + message.getMsg()));
    }
}

Я не понимаю, как отправить запрос через оставшуюся часть в websocket.Может кто-нибудь объяснить, почему при отправке запроса на /x веб-сокет не получает new HelloMessage?

1 Ответ

0 голосов
/ 15 декабря 2018

Когда вы вызываете другой метод из того же класса, вы просто делаете это: вызываете метод.Этот вызов метода не заботится о том, есть ли у вызываемого метода аннотации.

Метод приветствия () отправляет сообщение только при вызове от клиента websocket, отправляющего сообщение на /hello.

Чтобы отправить сообщение программным способом, вы используете SimpMessageTemplate, как задокументировано :

Что если вы хотите отправлять сообщения подключенным клиентам из какой-либо части приложения?Любой компонент приложения может отправлять сообщения в brokerChannel.Самый простой способ сделать это - внедрить SimpMessagingTemplate и использовать его для отправки сообщений.Как правило, вы вводите его по типу, как показано в следующем примере:

@Controller
public class GreetingController {

    private SimpMessagingTemplate template;

    @Autowired
    public GreetingController(SimpMessagingTemplate template) {
        this.template = template;
    }

    @RequestMapping(path="/greetings", method=POST)
    public void greet(String greeting) {
        String text = "[" + getTimestamp() + "]:" + greeting;
        this.template.convertAndSend("/topic/greetings", text);
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...