Я пытаюсь создать веб-приложение в реальном времени (виртуальная многопользовательская настольная игра).Я начал с запросов HTTP, но сейчас пытаюсь переключиться на веб-сокеты.Я использую фронтенд React и бэкэнд Spring Boot.Теперь я понимаю, что мне нужно создавать веб-сокеты, но у меня возникают проблемы с их реализацией.
Использование стандартных объектов веб-сокетов в реагировать нормально работало на тестовом сервере (echo.websocket.org), но большинство руководств в Интернете, похоже,предложить использовать конечные точки STOMP.Кажется, что я не могу использовать универсальный объект websocket, если я использовал конечные точки STOMP в моем бэкэнде.Учитывая, что данные, которые я хочу отправить, представляют собой небольшой массив (например, координаты игрока) для всех клиентов, подключенных к серверу, является ли STOMP правильным протоколом или я могу сделать это проще?
Часть реагирующего компонентаво внешнем интерфейсе.
import React from 'react';
import Stomp from 'stompjs';
componentDidMount() {
const ws = ("ws://localhost:8080/player");
var client = Stomp.client(ws);
client.connect({}, function() {
client.send("/location/update", {}, "coord: [3,2]");
});
}
Соответствующий контроллер во внутреннем интерфейсе.
@Controller
public class playerController {
public Player b = new Player("a", 1, 1, 1);
@MessageMapping("/player/location/update")
@SendTo("/playerLocation")
public int[] validClick(String value) throws Exception {
Thread.sleep(1000);
JSONObject temp = new JSONObject(value);
JSONArray val = temp.getJSONArray("coord");
int[] coord = {val.getInt(0), val.getInt(1)};
b.updateLocation(coord);
int[] newCoord = b.getLocation();
System.out.println(newCoord[0] + "," + newCoord[1]);
return b.getLocation();
}
Файл конфигурации: WebsocketConfig.java
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/playerLocation");
config.setApplicationDestinationPrefixes("/api");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/player").withSockJS();
}
Все компилируется нормально, но при взгляде наинструмент сетевого разработчика в браузере для веб-интерфейса, ошибка 404 не удалось подключиться.Кажется, это говорит о том, что проблема в бэкэнде, но я не уверен.Любой совет приветствуется.