Суббота, 28 Мая 2022, 20:58

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » Общие обсуждения программистов » Хранение информации о доступном ресурсе игрока
Хранение информации о доступном ресурсе игрока
LexinДата: Пятница, 24 Сентября 2021, 19:24 | Сообщение # 1
частый гость
Сейчас нет на сайте
Всем доброго времени суток!

Разрабатываю браузерную игру на vuejs + lumen. В качестве БД использую MySQL.

Вопрос следующий:
Как думаете, как хранить информацию о доступном пользователю ресурсе в бд?
Под ресурсом можно взять например количество зерна.
Сложность в том, что ресурс восполняется на +Nное количество единиц в секунду.
Если например на стороне клиента я увеличиваю количество ресурсов путем js скрипта, то на сервере как это делать?
Не будет же cron работать каждую секунду и изменять количество для всех игроков...
А само количество ресурсов нужно видеть в режиме реального времени, так как зерно игрок может потратить в любую секунду и потратить то количество которое ему уже доступно...

У кого какие мысли по этому поводу?

Добавлено (24 Сентября 2021, 19:26)
---------------------------------------------
В дополнение, даже если делать увеличение ресурса на +N в минуту... и игроков например 10к... крон будет создавать проблемы при увеличении количества ресурса для всех игроков каждую минуту... а если ресурсов будет несколько (камень, глина и др.) то ситуация усложняется...


Lexin InZector
Web/Wap/Win/Linux Programmer, Gamer, GameCreator, Designer, Developer, Animeshnik
dimati9Дата: Пятница, 24 Сентября 2021, 20:40 | Сообщение # 2
частый гость
Сейчас нет на сайте
Прикрути Socket IO?
Будет обновлять у клиента и рассылать всем кто в сети, а потом, с делеем записывать в базу, чтобы не нагружать, например каждые 10 минут,
это нужно чтобы был бекап, если сервер ляжет.

В ином случае хранить на клиенте, а потом записывать не выйдет, JS может прерваться в любой момент (закрыл вкладку, пропал интернет)
И записывать каждую секунды в базу ты не сможешь, нужны большие мощности.

Я вижу такой выход
При старте сервера получаешь в переменную Кол-Во зерна и просто через SOCKET IO раздаёшь
Меняешь ёё как хочешь и когда хочешь, независимо от базы и "ненадёжных" клиентов (игроков)
Раз в 10 минут пишешь в базу


- Обо мне -
drcrackДата: Пятница, 24 Сентября 2021, 21:36 | Сообщение # 3
старожил
Сейчас нет на сайте
если у тебя браузерка на пхп, можешь использовать крон, можешь вообще нанять специально обученного человека который будет увеличивать ресурсы в базе данных вручную, хуже уже не будет
AssasinДата: Пятница, 24 Сентября 2021, 23:50 | Сообщение # 4
web-coder
Сейчас нет на сайте
Можно и без socket.io, используя тот же php и да, используя крон. К примеру минутный, ты знаешь что в секунду у тебя +2 ресурса, значит в минуту 2*60 = 120. Если пользователь хочет потратить ресурс к примеру в 48 секунд, то ты можешь высчитать: количество ресурса что у него в БД + (2 * 48) > количество ресурса которое хотят потратить.
Цитата
и игроков например 10к... крон будет создавать проблемы при увеличении количества ресурса

Самый лучший совет - не думай что у тебя будет через N лет, решай проблемы сейчас. У тебя сейчас сколько игроков? Вот и пиши скрипт, что бы он быстро обрабатывал то количество игроков, сколько у тебя сейчас.
Во-вторых - не зря игры разбивают на зоны/инстансы/сервера/миры, что бы распределить игроков так, что бы система работала стабильно.
В-третьих - если написать плохой код, то и для 10 игроков будет больно, если написать код хорошо, то и для 100к будет норм.
LexinДата: Суббота, 25 Сентября 2021, 08:59 | Сообщение # 5
частый гость
Сейчас нет на сайте
Всем спасибо за идеи.

Assasin, думаю твой вариант мне больше подходит. На стороне клиента расчитывать эмуляцию количества ресурсов и синхронизировать точное количество раз в определенное время ajax запросами, а на стороне сервера при попытке потратить ресурсы, использовать:
Цитата
количество ресурса что у него в БД + (2 * 48) > количество ресурса которое хотят потратить.


Что касаемо этого:
Цитата Assasin ()
Самый лучший совет - не думай что у тебя будет через N лет, решай проблемы сейчас. У тебя сейчас сколько игроков? Вот и пиши скрипт, что бы он быстро обрабатывал то количество игроков, сколько у тебя сейчас.
Во-вторых - не зря игры разбивают на зоны/инстансы/сервера/миры, что бы распределить игроков так, что бы система работала стабильно.
В-третьих - если написать плохой код, то и для 10 игроков будет больно, если написать код хорошо, то и для 100к будет норм.

Спасибо за совет. Сейчас игра еще не имеет игроков, так как на данный момент она на стадии прототипа. Именно поэтому я и хочу в ТЗ описать наиболее продуманный вариант, чтобы потом не переписывать большие участки игры.


Lexin InZector
Web/Wap/Win/Linux Programmer, Gamer, GameCreator, Designer, Developer, Animeshnik
dimati9Дата: Суббота, 25 Сентября 2021, 21:35 | Сообщение # 6
частый гость
Сейчас нет на сайте
Цитата Lexin ()
На стороне клиента расчитывать эмуляцию количества ресурсов и синхронизировать точное количество раз в определенное время

Я ещё раз напомню что клиент не надёжен, он может в любой момент выйти или у него упадёт интернет
Как думаешь решать эту проблему?
Если игроков будет 10к твой сервер будет лежать по кд, даже если ты будешь делать записи раз в 10 минут
Тогда тебе будут нужные огромные мощности, а mysql не справится и с половиной

Добавлено (25 Сентября 2021, 21:37)
---------------------------------------------

Цитата Assasin ()
Самый лучший совет - не думай что у тебя будет через N лет, решай проблемы сейчас. У тебя сейчас сколько игроков? Вот и пиши скрипт, что бы он быстро обрабатывал то количество игроков, сколько у тебя сейчас.

Это ужасный совет, если не заложить архитектуру на будущее, у тебя его не будет
Ты сделаешь ужасный сервер на php+mysql, на 100 человек это будет работать отлично
На 5к умрёт и что ты будешь делать?)

Реши сразу на сколько человек делать, для друзей на 5-рых или на массовый рынок?)


- Обо мне -
AssasinДата: Суббота, 25 Сентября 2021, 22:02 | Сообщение # 7
web-coder
Сейчас нет на сайте
Цитата
если не заложить архитектуру на будущее

Что бы это сделать, нужно иметь такой обыт вообще. Если человек до этого никогда не работал над высоконагруженными проектами, то он ничего заложить не сможет. Так как у него попросту нет опыта в этом. Поэтому люди-самоучки и набивают свои шишки по шагам. Сначала первая итерация на 1-10 человек, потом вторая итерация на 10-50 человек и т.д.

При том "архитектура", это не только код на php и БД. Это также (в случае с браузерной игрой) лоад балансеры, ОС на которой это всё будет запускаться, статика (nginx), прокси, внутренние сети, хоть что то в плане контейниризации (docker), оркестрация (kubernetes), статистика/метрики (Prometheus, Grafana, ELK), логирование (ELK, fluentd).


Сообщение отредактировал Assasin - Суббота, 25 Сентября 2021, 22:07
drcrackДата: Воскресенье, 26 Сентября 2021, 05:39 | Сообщение # 8
старожил
Сейчас нет на сайте
удивительно как тут всерьез обсуждают проблемы производительности при 10к игроках
10к игроков — это не проблема
это реальный успех, которого не увидят 99.99% инди разрабов
большинство не увидит даже 100 игроков
а те кто дойдут до 10к, уж точно смогут позволить себе нанять пару кодеров чтобы переписать сервер с нуля на адекватном стеке
реально не о том беспокоитесь
AssasinДата: Воскресенье, 26 Сентября 2021, 11:58 | Сообщение # 9
web-coder
Сейчас нет на сайте
drcrack, ты сейчас разрушил мечты всех начинающих разработчиков :) но именно об этом я и говорю
Форум игроделов » Программирование » Общие обсуждения программистов » Хранение информации о доступном ресурсе игрока
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2022 Рейтинг