Возможно, я немного отклоняюсь от темы, но эта тема меня интересует, так как я (в хобби) работал на довольно многих игровых серверах (MMORPG-серверах) - и на чужом коде, и на моем. Там есть литература, которая будет вам интересна, напишите мне, если вам нужны ссылки.
Одна вещь, которая поражает меня в вашем вопросе, это желание обслуживать тысячи пользователей многопоточного приложения. По моему скромному опыту, это не очень хорошо работает. :-)
Когда вы обслуживаете тысячи пользователей, вы хотите, чтобы дизайн был как можно более модульным, потому что одной из ваших основных целей будет поддерживать работу службы в целом. Игровые серверы имеют тенденцию быть довольно сложными, поэтому будет довольно много ошибок, вызывающих остановку шоу. Не делайте свою жизнь несчастной с одной точкой отказа (одно приложение!).
Вместо этого попробуйте создать несколько процессов, которые могут работать на множестве хостов. Мое скромное предложение следующее:
- Сделайте их независимыми, чтобы сбойный процесс не имел отношения к службе.
- Сделайте их маленькими, чтобы было легко понять различные части службы и их взаимодействие.
- Не позволяйте пользователям напрямую общаться с игровой логической базой данных. Написать прокси - сетевые стеки могут и будут показывать странное поведение на разных архитектурах, когда у вас множество пользователей. Также убедитесь, что вы можете позже «очистить» / отфильтровать то, что прокси пересылает.
- Иметь процесс, который будет отслеживать только другие процессы, чтобы видеть, все ли они работают должным образом, с возможностью перезапуска деталей.
- Сделайте их распространяемыми. С самого начала координируйте процессы через TCP, иначе у вас возникнут проблемы с масштабируемостью.
- Если у вас большие ландшафты, рассмотрите способы динамического деления нагрузки путем деления серверов по географии. Не каждый бэкэнд-процесс хранит все данные в памяти.
Я перенес несколько таких движков, написанных на C ++ и C # для хостов, работающих на Linux, FreeBSD, а также на Solaris (на старом UltraSparc IIi - да, моно все еще работает там :). По моему опыту, C # работает достаточно быстро, учитывая, какое древнее оборудование он использует на этой машине sparc.
Индустрия (насколько я знаю) имеет тенденцию использовать много C ++ для обслуживания и встраивает языки сценариев для реальной игровой логики. Ах, уже слишком много написано - кстати классная тема.