Quote:
Originally Posted by stabker
При загрузке тоже можно обойтись без однопоточных, просто залочив сервер.
|
Неудобство для игроков, ибо придётся перезапускать игру, так как при коннекте выплюнет ошибку о том, что пароль неверный. Лучше уж пусть сервер займётся загрузкой и просто не будет пускать игроков. А на случай, если всё же кто-то пробьётся по очереди, сделать банальную систему ожидания.
То бишь, создать переменную и при старте приравнять её к единице. При входе проверять, равна ли переменная единице или нет. Если равна - выводим диалог, мол нужно подождать. Только загрузка завершается, сразу присваиваем переменной нулевое значение и выводим всем подключённым игрокам диалог с авторизацией. Просто и сердито.
Можно, конечно, и с многопоточными запросами такое провернуть, но тогда после рестарта на сервер сразу забьётся человек под 300 (ну при соответствующем онлайне) и когда загрузка завершится, все 300 человек начнут одновременно слать запросы, когда в случае с однопоточными запросами сервер вряд ли успеет много народу впустить и "флуда" будет меньше.
Quote:
Originally Posted by stabker
Где еще, по вашему, без однопоточных не обойтись?
|
Эмм, в любых системах, которые сильно зависят от данных из БД. Либо же в системах, где несколько человек могут работать с одними и теми же данными. Систем, где однопоточные запросы прямо остро необходимы, не так уж и много, поэтому сейчас с ходу пример и не назову (но случаи были). На моём опыте гораздо больше примеров, когда однопоточные запросы в разы упрощали код (система загрузки и созданения данных сервера - простой тому пример), не особо убивая, при этом, производительность (либо сами запросы простые, либо возможные лаги от обработки запроса уместны в конкретном случае, как с загрузкой данных).