Всё проще: записываем в таблицу время начала строительства, и пока никто не обратился к игровому состоянию этого игрока больше ничего не делаем. Если потребовалось получить эту информацию (игрок создал сессию или произошло мультиплеерное событие) - читаем текущее состояние и актуализируем его, т.е. все завершённые здания становятся достроенными и в режиме fast-forward вычисляется их влияние на состояние игры с момента постройки до текущего момента (т.е., например, если построена шахта то добавляются все ресурсы которые она должна была произвести с момента постройки). Никаких таймеров, тредов и крона (представляйте что они сделают с сервером с миллионом игроков, 75% которых не заходили уже полгода?). Максимум отдельная очередь сообщений для push-нотификаций.
Всё проще: записываем в таблицу время начала строительства, и пока никто не обратился к игровому состоянию этого игрока больше ничего не делаем. Если потребовалось получить эту информацию (игрок создал сессию или произошло мультиплеерное событие) - читаем текущее состояние и актуализируем его, т.е. все завершённые здания становятся достроенными и в режиме fast-forward вычисляется их влияние на состояние игры с момента постройки до текущего момента (т.е., например, если построена шахта то добавляются все ресурсы которые она должна была произвести с момента постройки). Никаких таймеров, тредов и крона (представляйте что они сделают с сервером с миллионом игроков, 75% которых не заходили уже полгода?). Максимум отдельная очередь сообщений для push-нотификаций.