Как разделить объект между сеансами websocket - PullRequest
0 голосов
/ 30 сентября 2018

В настоящее время я работаю над игровым сервером на основе веб-сокета.Идея состоит в том, что пользователь может перейти к:

ws://host:port/game/{userid}

Таким образом, пользователь регистрируется на сервере.Оттуда на сервере есть объект GameManager, который назначает игрока открытой игре.Если открытой игры не существует, создается новая игра.Вот как выглядит моя конечная точка сервера:

package websocket;
import java.io.IOException;

import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;

import model.Player;

@ServerEndpoint("/game/{userid}")
public class GameWebSocketServer {

    private GameManager gameManager = new GameManager();

    public GameWebSocketServer() {

    }

    @OnOpen
    public void onOpen( Session session,
                        @PathParam("userid") String userid) {
        Player player = new Player(userid, session);
        gameManager.addPlayerToOpenGame(player);
    }

    @OnClose
    public void onClose(Session session) {

    }

    @OnMessage
    public void onMessage(String message, Session session) {

    }

    @OnError
    public void onError(Throwable t) {

    }
}

Проблема, с которой я сталкиваюсь, заключается в том, что объект GameManager, похоже, не является общим для каждого игрока / сеанса на моем сервере.Каждый раз, когда новый игрок регистрирует новый экземпляр класса GameManager, создается.Это приводит к тому, что каждый экземпляр GameManager создает другую игру, и поэтому все игроки попадают в отдельные игры.

Во-первых, правильно ли мое понимание проблемы?Каждый игрок подключается, значит, создается новый экземпляр сервера (а также GameManager)?

Во-вторых, есть ли хороший способ решить эту проблему?Я думаю, что мог бы сделать GameManager статическим членом класса GameWebSocketServer, но разве это хорошая практика?

С уважением!

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