Как правильно организовать архитектуру многопользовательской браузерной игры?
Добрый день, переношу настольную игру в веб. Вся серверная логика уже написана, взаимодействие между игроками тоже, но не уверен, что реализовал это взаимодействие правильно.
Исходные данные:
Клиенты(6 Игроков), Сервер 1 шт,Сокет сервер 1 шт
Как происходит взаимодействие между игроками сейчас:
Игрок 1 кликает на кнопку. По нажатии на неё отправляется запрос в контроллер на сервер. В контроллере выполняется какая-то логика и происходит взаимодейтсвие с базой данных, возвращается результат с данными обратно Игроку 1(Эти данные нам нужно передать всем игрокам)Далее этот же Игрок 1 отправляет эти данные сокет серверу, тот перенапрявляет эти данные на все подключенные соединения(Игроки 1-6).
Вот это именно мне здесь и не нравится, что Игрок1 отвечат за передачу данных остальным Игрокам.
Кажется более логичным, чтобы данные передавал не Игрок 1 на вебсокет сервер, а непременно сам сервер.
Но совсем непонятно как организовать взаимодействие обычного и сокет серверов.
Вообще возможно ли cделать http запрос к socket серверу со стороны другого сервера и если можно, то как?
P.S. Сервер(php) и сокет сервер(php, могу на node.js переделать)
оповещает не Игрок1. Игрок1 отправляет данные,которые нужно обновить, на websocket сервер,а уже тот перенаправляет эти данные на все подключенные соединения(Игроки 1-6)
reislor97, В вопросе было написано другое. Похоже, Вы исправили.
Сейчас Вы пишете корректнее. Но тут вообще непонятно, почему сервер пишет ответ только Игроку1. Ведь сервер сразу может написать всем Игрокам.
Короче - решение б обновлении данных сервер может принять сам, до отправки ответа Игроку1.
Самый безболезненный для вас - сделать на сервере демона, который после старта боя/игры будет вести ход игры. В вашем случае, вас может выручить ваш сокет сервер.. раз уж все на php контроллерах сделано, то сделайте взаимодействие лишь черезинего, а он в свою очередь пусть дергает нужные php контроллеры.
Но это слегка костыль.. лучше было бы написать полноценного демона.. на php кстати тоже вполне себе не плохо пишутся демоны и вебсокет серверы.
Но лично я бы для всех этих целий воспользовался nodejs.
reislor97, один демон, которому будут сообщать о старте игры другие компоненты игры. Возьмем к примеру карточную игру. Игроки изъявили желание начать игру в 6 человек. Демон увидел что игра создалась и на первом этапе ждет к примеру 10 секунд на подключение всех игроков и подтверждение об их готовности от каждого. После подтверждения демон меняет статус на "ход игрока 1", ждет либо хода, либо по таймауту передает ход следующему. В свою очередь, игроки по средствам сокетов отдают команды серверу, а тот тут же на них реагирует и оповещает других игроков об изменении... получается самый что ни на есть рилтайм.