Пробую разрабатывать сетевой 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 ответов

27 просмотров

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

Руслан- Автор вопроса
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 есть ролноценный плагин в анрил. Если все же захочется делать самому - то можно сделать по примеру этих решений. Но если нет отдельных людей на бекенд - не стоит.

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

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

Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
5
А в каком формате фреймы? Сам формат сейчас придумываешь, или что-то готовое нужно распарсить?
Okhsunrog
5
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Карта сайта