Пробую разрабатывать сетевой survival. Для взаимодействия с БД использую web-сервер. Есть несколько

непонятных для меня моментов:
1. Как я вижу логику взаимодействия между web-сервером и игровым сервером при регистрации и авторизации:
1.1. запускаю web-сервер и игровой сервер (на игровом сервере всего одна карта);
1.2. запускаю клиент игры;
1.3. регистрирусь в игре через клиент игры:
1.3.1. заполняю формы логина, пароля и email для регистрации (для отправки данных использую плагин VaRest);
1.3.2. отправляю данные с формы методом POST (или json) на web-сервер;
1.3.3. на стороне web-сервера проверяется логика (оригинальность логина и email), хешируется пароль (при успешой регистрации);
1.3.4. при неуудачной регистрации web-сервер сообщает об этом пользователю (клиенту игры), отправив ответ методом POST (или json);
1.3.5. при удачной регистрации web-сервер записывает данные в БД и сообщает об этом пользователю (клиенту игры), отправив ответ методом POST (или json);
1.4. для авторизации ввожу логин и пароль на клиенте игры и отправляю на web-сервер методом POST (или json);
1.5. web-сервер проверяет есть-ли такой пользователь с таким паролем в БД;
1.6. Ответ web-сервера клиенту:
1.6.1. если авторизация неуспешная, то web-сервер сообщает об этом пользователю методом POST (или json), что такого логина с таким паролем не найдено;
1.6.2. если авторизация успешная, то web-сервер отправляет данные об удачной авторизации методом POST (или json) на клиент игры и пользователь переходит на игровую карту сервера.
2. Логику взаимодействия между web-сервером и игровым сервером в тот момент, когда пользователь online, я вижу в нескольких вариантах:
2.1. со стороны web-сервера с помощью cron проверять, к примеру, каждые 2 секунды online каждого пользователя;
2.2. с клиента игры отправлять те же 2 секунды данные об активности пользователя, а с помощью cron также проверять каждые 10 секунд online каждого пользователя.

Вопросы:
1) Что неправильно/некорректно в представленной мною логике?
1) Какие данные при успешной авторизации web-сервер должен отправлять клиенту, а клиент далее игровому серверу ( см. 1.6.2.)? Токен и id игрока?
2) Как правильно реализовать взаимодействие между web-сервером и игровым сервером в тот момент, когда пользователь online (см. 2.) и какую информацию в этот момент передавать?

P.S. За портянку прошу прощения. Старался изложить по сути...

16 ответов

10 просмотров

Хочу уточнить, я правильно понимаю что пост запросы тут используются только для авторизации, и ты не собираешься непосредственно мультиплеер на них делать?

Руслан- Автор вопроса
Nikita Rudy
Хочу уточнить, я правильно понимаю что пост запрос...

POST (или json) запросы планирую применять для регистрации, авторизации, выхода из игры (для сохранения данных об игроке в БД) и проверки того, что игрок сейчас онлайн - не более.

Онлайн с HTTP запросами каждые 2 секунды будет тяжеловато на большом количестве игроков имхо

Ещё раз 👋 по поводу логин сервера я тебе скидывал видос с моего канала https://m.youtube.com/watch?v=Y83z6e1Pof0 А насчёт коммуникации, советую смотреть в сторону websocket, в 4.27 По-моему websocket уже был рабочий.

Don't to Me
Ещё раз 👋 по поводу логин сервера я тебе скидывал ...

Вебсокет рабочий с момента как они пиксель стриминг начали тыкать)

Egor | hackerman.me
Вебсокет рабочий с момента как они пиксель стримин...

На гите много в исходниках не доработок было, правда времени немного утекло с того момента)

Руслан
Вполне возможно...

Вебсокеты для этого лучше те же

Руслан- Автор вопроса
Руслан
Благодарю за совет.

Есть ещё вариант protobuf, но я его не интегрировал в анрил пока

Egor | hackerman.me
Вебсокеты для этого лучше те же

Это очень, очень спорное утверждение)))

Советую познакомиться с playfab или gamelift. Там есть все что надо и куча документации, у pf есть ролноценный плагин в анрил. Если все же захочется делать самому - то можно сделать по примеру этих решений. Но если нет отдельных людей на бекенд - не стоит.

Похожие вопросы

Обсуждают сегодня

Почему Telegram пишет, что объект media не найден, хотя на самом деле я его передаю? Делаю на urllib, без зависимостей, так надо. Вызываю метод sendMediaGroup с таким JSON: ...
Alexey S
1
Сonst magicTgHTML = (text, entities) => { let processedText = text; let offsetShift = 0; entities.forEach(entity => { const { offset, length, type, url, ...
Андрей
1
Чет мне ссыкотно опять Rainlab.User в проект ставить. Кто знает, опять наотъебись все сделали или после обнов пользоваться можно?
Black Cat
10
это группа токсиков или тех кто помогает?
Ибрагим
9
Гайз, кто-нибудь пробовал запустить probe-rs под камень, которого нет в probe-rs? Мб есть какой-нибудь пример у кого... Через target-gen попробовал сгенерировать chip-descript...
Максим Смирнов
2
коллеги привет. уже второй день бьемся об заклад с одной ошибкой, может вы сталкивались с таки странным поведением? есть тестовый сервер, на который паблишим релизную версию W...
Magzhan
11
Загрузил на свой сервер, теперь обычные прямые ссылки без query параметров и возможных ограничений, всё равно та же ошибка. Неужели скачивать из VK и перезаливать в TG кажд...
Alexey S
2
В смысле более затратная? Общая стоимость владения лошадью меньше, чем автомобиля. В среднем.
Sergej R
10
Кстати, раз про скачивание файлов разговор зашел) Сделал бота для себя (транскрибирующего и суммаризирующего встречи) но не ожидал что за 2 месяца 10к пользователей набежит😅...
Andrey Obolenskiy
8
Можете помочь с этим, я тут использую Джанго как ОРМ для бота, но бот запускать не хочет, уже всезде перерыл не могу решить, может кто то сталкивался?
Ибрагим
4
Карта сайта