Как сделать разные ресурсы для каждого пользователя, используя REST API - PullRequest
0 голосов
/ 02 марта 2019

в школьном проекте мы кодировали игровую реализацию на Java и отображаем настоящую игру через Angular.Мы кодировали игровой объект, который представляет реальную игру, и создали класс «GameResource», который позволяет нам манипулировать аргументом игрового объекта в этом классе с помощью вызова REST следующим образом:

@PUT
@Path("moove/{x1}/{x2}/{y1}/{y2}")
@Produces(MediaType.APPLICATION_JSON)
public Response play(@PathParam("x1") final int oldX, @PathParam("x2") final int newX, @PathParam("y1") final int oldY, @PathParam("y2") final int newY) {
    if (game.getBoard().getPiece(oldX, oldY).hasBall()) {
        game.play(new MoveBall(oldX, oldY, newX, newY));
    } else {
        game.play(new MovePion(oldX, oldY, newX, newY));
    }
    game.flushUndo();
    if (game.isFinished().isPresent()) {
        return Response.ok().entity(game.isFinished().get()).build();
    }
    return Response.ok().entity(game).build();
}

Как видите,мы просто вызываем метод для игрового объекта и возвращаем игру, чтобы мы могли отобразить ее через Angular.Но проблема в том, что этот объект является общим для каждого пользователя, что означает, что 2 человека не могут играть одновременно.

Я уже кодировал многопоточный «облачный» сервис, который использует сокет и запускает новыйнить для обработки нового пользователя каждый раз, когда кто-то подключается к этому сокету, но я не знаю, как это сделать с помощью REST API, и даже если мне следует использовать REST API в этом случае.Любой совет будет очень приветствоваться, спасибо

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Вам нужно много game объектов для каждого пользователя.Это означает, что вам нужна служба отдыха с сохранением состояния, хотя это идет вразрез с основной идеей отдыха ( Безгражданство ).

В любом случае, вы можете реализовать отслеживание состояния , добавив один из методов аутентификации.Подробности см. Здесь: Аутентификация RESTful .

Тогда вы можете хранить все игры в некоторой структуре данных, например Map<User, Game>, и получать необходимую игру для каждого пользователя.

Подробнеео состоянии в состоянии покоя: Если REST-приложения должны быть без состояния, как вы управляете сеансами?

0 голосов
/ 02 марта 2019

Ваш вопрос не связан с Angular или Rest.

Проблема в том, что ваш "игровой" экземпляр используется всеми сеансами.Вам нужен экземпляр игры для каждого пользователя на сервере, и для этого есть несколько способов.

Я предлагаю создать некий «GameStore», который будет использовать идентификатор сессии для хранения игры.экземпляров.В зависимости от используемой вами структуры у вас, возможно, уже есть файл cookie с именем JSESSIONID, который идентифицирует различных пользователей, обращающихся к вашей службе отдыха.

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