@pshevnin

Как придумать архитектуру сервера на c++?

Начинаю изучать клиент-серверные приложения и есть такая задача: написать онлайн игру шашки, в которой клиент будет на java, а сервер на c++. Сервер должен одновременно обслуживать до n игровых комнат. Итак сам вопрос: как можно реализовать сами комнаты? Можно ли представить комнаты потоками? Тогда получится ли корректно работать с двумя игроками в одном потоке? Или каждый игрок обязательно должен быть самостоятельным потоком, и информацию о комнатах нужно хранить отдельно?
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
VoidVolker
@VoidVolker
Разработчик ПО и IT-инженер
В целом совет простой и стандартный: рисуете три элемента - входящие данные, игра, исходящие данные (для сервера и для клиента). Далее делаете декомпозицию каждого элемента - от сложного к простому. Повторяете несколько раз вниз до самого простого элемента. Далее структурируете и организовываете вашу архитектуру логически в объекты, методы, классы, модули и прочее. Например: раз, два.

как можно реализовать сами комнаты?

Структурой.

Можно ли представить комнаты потоками?

Можно, но не нужно. Это несколько разные концепции. Комната - это набор данных. Поток - это процесс обработки данных.

Тогда получится ли корректно работать с двумя игроками в одном потоке?

Вполне. Обратите внимание на существующие онлайн игры - тысячи и миллионы игроков.

Или каждый игрок обязательно должен быть самостоятельным потоком, и информацию о комнатах нужно хранить отдельно?

Опять путаете процесс и данные. Игрок - это тоже данные.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
Можно на одну комнату один поток, тогда сокеты игроков делаете не блокирующими и используете асинхронные сетевые операции с двумя сокетами в одном потоке.
Но если уж делать сокеты не блокирующими, тогда ничего не мешает в одном потоке обрабатывать сразу несколько комнат. Обычно создают пул потоков по количеству ядер процессора и размазывают всю нагрузку по всем потокам. Но надо добиться того, чтобы обработка данных игроков в одной комнате происходила в одном же потоке, так избавитесь от разделяемых данных и не надо будет синхронизировать потоки (мьютексы и т.п.).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы