От вашего вопроса я подозреваю, что вы могли бы извлечь пользу из просмотра Beej Guide to Network Programming .
- Нужен ли мне отдельный сокет ("комнатный сокет")для каждого одновременного сражения?
Я не уверен, что вы подразумеваете под "комнатным" сокетом.Если вы имеете в виду, что для каждой игры будет назначен другой сокет прослушивания, это будет нецелесообразно.
Обычный способ - это прослушивание сервером одного сокета (адрес / порт) икаждый клиент будет подключаться к сокету сервера.
Это означает, что сервер будет иметь сокет для каждого активного клиента + сокет прослушивания, а каждая реализация клиента будет иметь один сокет (сокет подключения).
Для игры 1: 1 сокеты могут быть «согласованы» с куплетом сервером, превращая этот «куплет» в комнату.
Для игры 1: много вы можете подумать об использовании паба/ sub шаблон путем реализации «каналов» и «подписок» ... Однако, поскольку (я предполагаю) игрок может одновременно входить только в одну игру, вы можете рассмотреть возможность создания массива или связанного списка игроков для каждой игры.
Можно ли привязать все эти сокеты к одному порту?Как клиент может подключиться к «своему» сокету, если адреса и порты совпадают?
Да, это возможно, и именно так на самом деле работают серверы.
Слушающий сокет ведет себя немного иначе, чем сокет подключения, в том смысле, что прослушивающий сокет может «принимать» соединения и создавать новый сокет для каждого соединения.
Когда и как открыть «комнатные розетки», чтобы каждый клиент получил соответствующую конечную точку?Как написать это на стороне сервера?
Это зависит от языка.Большинство языков имеют некоторые разновидности функций прослушивания в Руководстве по сетевому программированию Beej .
Обычно сервер вызывает listen
, а затем создает новые клиентские сокеты, используя accept
.Клиент будет звонить connect
и иметь один сокет.
Сколько сокетов мне нужно для очереди на матч («приветственные сокеты»)?
Для игры 1: 1 вам понадобится один сокет «в очереди», поскольку он ожидаетследующее доступное соединение.
Конечно, это может быть более сложным.Если у клиента есть требование к игре (то есть, только игроки уровня 10 и выше), вам может потребоваться упорядоченный список или другое хранилище данных для управления очередью.
Должен ли я использовать многопоточное программирование, или можно обойтись без него?
Вероятно, вы можете запускать тысячи игр на одном компьютере с одним потоком, если вы используетеВыровненный (неблокирующий) дизайн.
Это действительно зависит от того, сколько работы выполняется на сервере и сколько работы выполняется на компьютере клиента.