Выбор компьютера в локальной сети в качестве сервера

Я работаю над небольшой сетевой игрой (только в локальной сети), где один компьютер действует как сервер, а все остальные (включая реальную игру, работающую на том же компьютере) действуют как клиенты. По сути, сервер прозрачен для пользователей, но существует для того, чтобы упростить мне управление состоянием. Основная концепция, которая у меня сейчас есть, заключается в том, что компьютер каждого игрока скажет: «Эй, я хотел бы сыграть» через широковещательную рассылку и будет вести список других игроков в сети. После того, как каждый игрок, запускающий игру, указывает, что он готов, один компьютер выбирается в качестве сервера, а остальные по умолчанию являются клиентами.

При выборе того, какой компьютер в локальной сети использовать в качестве сервера, действительно ли существует какой-либо установленный способ выбрать один и сообщить другим?

Я возился с основной идеей, заключающейся в том, чтобы компьютеры всех игроков просто выбирали случайное число, а тот, у которого наименьший (или самый высокий, не имеет значения), был сервером (восстановление случайных чисел для компьютеров, которые выбрасывают одно и то же число). ). Каждый компьютер получал «выпавший» номер других и мог определить, какой из них будет сервером, после чего мог к нему подключиться. Это кажется грубым, но я не уверен, имеет ли это значение, поскольку все компьютеры физически будут в одной сети в пределах нескольких футов друг от друга. Будет ли это делать работу адекватно или есть значительно лучший способ?


person Gemini14    schedule 18.06.2011    source источник
comment
Эта концепция известна как выборы руководства в распределенных вычислениях.   -  person chrisaycock    schedule 18.06.2011
comment
@chrisaycock Очень интересная концепция, спасибо, что указали на нее. Используя это в качестве отправной точки, мы уже нашли несколько очень полезных документов и других ресурсов.   -  person Gemini14    schedule 18.06.2011


Ответы (1)


Честно говоря, я бы сделал решение немного сложнее. Я был бы склонен собрать некоторую базовую информацию, чтобы определить, какой компьютер имеет наибольшую мощность, и выбрать его в качестве сервера (мощность намеренно является расплывчатым термином, потому что самый мощный компьютер будет зависеть от требований сервера и игры). . Учитывая, что сервер должен будет запускать дополнительное программное обеспечение (сервер в дополнение к игре), само собой разумеется, что, если все компьютеры не имеют одинаковых характеристик, один будет лучше подходить для этой задачи, чем другие. Пока все узлы выполняют одинаковую оценку данных, все они должны прийти к консенсусу относительно того, кто должен вести, или вы можете сделать так, чтобы первый узел, создавший игру, отвечал за определение того, какой узел должен быть сервером.

Также может быть целесообразно настроить сервер для периодической переоценки его квалификации в качестве сервера. Например, могут запускаться фоновые процессы, которые будут препятствовать его адекватной работе, или к игре может присоединиться более мощный узел. Очевидно, что сменить сервер, на котором размещена игра, было бы нетривиально, но об этом стоит подумать. (имейте в виду, что это происходит в онлайн-играх, например, в Halo. Когда подключение всех клиентов к серверу падает ниже определенного порога, игра приостанавливается и восстанавливается на другом сервере, который может обеспечить лучшую производительность).

person Chris Thompson    schedule 18.06.2011