Является ли поток для обработки каждого клиента лучшим решением для этого проекта? - PullRequest
0 голосов
/ 28 апреля 2019

В настоящее время я разрабатываю «онлайн» настольную игру на C с сокетами AF_INET. Он состоит из сервера, который является «рефери» игры, и клиента на игрока. Единственная задача клиента - отправлять на сервер позицию места на доске, выбранного игроком (игра), и только сервер должен обрабатывать игру каждого игрока. Сервер всегда транслирует изменения на доске каждому игроку.

Главное, с чем я борюсь - это общение. У меня есть 2 варианта:

  • Реализация потоковых сокетов и создание на сервере потока (и сокета) для обработки каждого клиента.

  • Внедрите только сокет датаграммы на сервере и создайте поток для обработки каждого полученного воспроизведения, идентифицируя игрока по его IP.

Со вторым вариантом у меня должна быть некоторая структура данных для хранения данных каждого игрока (вероятно, хеш-таблицы для обеспечения быстрого доступа), таких как его счет, и в каждой полученной игре Мне нужно обновить данные соответствующего игрока. В то время как в первом варианте локальные переменные стека потока могут содержать эту информацию.

Кроме того, в первом варианте мне пришлось бы иметь (без необходимости) много потоков, даже если recvfrom - это функция с пассивным ожиданием, ядру пришлось бы тратить время на управление всеми сообщениями и перенаправлять их на правильное гнездо верно?

В целом, я хочу реализовать наиболее эффективную стратегию взаимодействия клиент-сервер, даже если мне потребуется больше времени для ее реализации. Какой самый эффективный вариант?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...