Я хочу написать простую многопользовательскую игру как часть моего учебного проекта на С++.
Поэтому я подумал, что, поскольку я нахожусь в этом, я хотел бы сделать это правильно, а не просто делать это.
Если я правильно понял: Apache использует архитектуру Thread-per-connection, а nginx использует цикл событий, а затем выделяет рабочего [x] для входящего подключение. Думаю, nginx мудрее, так как он поддерживает более высокий уровень concurrency. Правильно?
Я также столкнулся с этой умной аналогией, но я не уверен, можно ли ее применить к моей ситуации. Аналогия также кажется очень идеалистической. Я редко видел, что мой компьютер работает на 100% -ном процессоре (даже с открытыми вкладками Chrome, Photoshop и тем, что не работает одновременно)
Кроме того, я столкнулся с SO-сообщением (как-то он исчез из моей истории), когда пользователь спросил, сколько потоков они должны использовать, и один из ответов заключался в том, что вполне приемлемо иметь около 700, даже до 10 000 потоки. Однако этот вопрос был связан с JVM.
Итак, давайте оценим вымышленную пользовательскую базу около 5000 пользователей. Какой подход должен быть "наиболее параллельным"?
- Образец реактора работает все в одном потоке.
- Схема реактора с пулом потоков (примерно, насколько велика вы предполагаете, что пул потоков должен быть?
- Создание потока для каждого соединения, а затем уничтожение потока, которое соединение закрывается.
Я признаю, что вариант 2 звучит как лучшее решение для меня, но я очень зеленый во всем этом, поэтому я мог бы быть немного наивным и пропустить какой-то очевидный недостаток. Кроме того, похоже, что это довольно сложно реализовать.
PS: Я рассматриваю возможность использования POCO С++ Libraries. Предлагая любые альтернативные библиотеки (например, boost), я в порядке. Однако многие говорят, что библиотека POCO очень чиста и понятна. Поэтому я бы предпочел использовать этот, поэтому я могу узнать о том, что я использую.