Как правильно настроить websocket с помощью springboot и reactjs? - PullRequest
0 голосов
/ 30 мая 2020

Я могу установить sh соединение через веб-сокет с моим сервером Springboot, но я не могу получить доступ к конечной точке из @MessageMapping, когда я пытаюсь отправить сообщение. Вот мои конфигурации:

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/simulator")
            .setAllowedOrigins("http://myiphere:3000")
            .withSockJS();
}

@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
    registry.enableSimpleBroker("/endpoint");
    registry.setApplicationDestinationPrefixes("/app");
}

И простой контроллер:

@RestController
@RequestMapping("/api")
public class MyController {

 @MessageMapping("/hello/")
 @SendTo("/endpoint/greeting")
 public Greeting getCurrentLocation() {
     System.out.println("hello here");
     return GenericBuilder.of(Greeting::new)
                          .with(Greeting::setContent, "hello from server")
                          .build();
 }

}

Я использую библиотеку socketjs-client в ReactJS, следуя this учебник:

import SockJS from "sockjs-client";
import Stomp from "stompjs";

let stompClient;

const connect = () => {
    const socket = new SockJS("http://myiphere:8081/simulator");
    stompClient = Stomp.over(socket);
    stompClient.connect({}, function (frame) {
        console.log("Connected " + frame);
        stompClient.subscribe("http://myiphere:8081/endpoint/greeting", function (greeting) {
        console.log("hi" + JSON.parse(greeting.body).content);
        });
    });
};

const sendSomething = () => {
    stompClient.send("http://myiphere:8081/app/hello/", {});
};

И некоторые кнопки с событиями onClick, привязанными к методам выше. Соединение работает, я получаю сообщения о подключении в консоли браузера, но когда я пытаюсь нажать кнопку с sendSomething(), я ничего не получаю ни в консоли браузера, ни в консоли сервера.

1 Ответ

0 голосов
/ 30 мая 2020

Решено.

Проблема заключалась в абсолютном пути URL-адреса в методе send().

PS: И я искал ответ на этот вопрос проблема на многих сайтах и ​​обнаружила, что нет необходимости использовать абсолютный путь для subscribe() url.

PPS: В случае, если у кого-то еще есть эти проблемы, ищите дополнительные / слишком. Вы должны быть осторожны при установке URL-адреса. Шаблон из JS должен совпадать с шаблоном из SpringBoot.

...