ПрограммированиеФорумСеть

Логин сервер и игровой сервер

#0
12:44, 23 мая 2010

Где-нибудь есть документы по организации игровых серверов? Точнее их взаимодействия. Дело в том, что я все время писал все в одном - работа с логинами, работа с базами, игровой процесс, запускал одно приложение и это был сервер игры. Сколько смотрю, вижу, что люди обычно делают 2 сервера (может даже на одном физическом) - логин и игровой сервер. Действительно ли так лучше формировать онлайн игру? И как происходит процесс входа в игру? Насколько я понимаю:

1. Клиент конектится к логин серверу, который в случае успеха дает ему адрес сервера, где его герой лежит, а также некоторый "ключ" к нему.
2. Клиент обрывает связь там, и соединяется с игровым сервером, и передает ему мол "хочу играть героем 12837, вот ключ heu4h28qhwq", и сервер привязывает его к этому герою.

Либо как-то иначе?

#1
12:54, 23 мая 2010

есть много причин делать логин сервер отдельно.
например - что-бы при падении/выключении игрового сервера клиент не долбился в закрытый порт, а получал информацию что сервер не работает.

и да, обычно связь решается самодельными сессионными ключами, хотя есть и стандартные протоколы. сейчас более опытные студенты подскажут, как они называются.

p.s. ты забыл еще одну немаловажную деталь сервера - патч сервер. его тоже обычно делают отдельно.

#2
16:48, 23 мая 2010

AntonV
Если в кол-во одновременно играющих не превышает порядка нескольких тысяч, то делают всё на одном, в т.ч. логин и патчи.
Припадении клиент просто выдаёт надпись (на основании ожидания некоторого времени), что сервер недоступен.

Прошло более 1 года
#3
16:51, 31 июля 2011

А может кто разъяснить или подсказать как взаимодействуют лс <-> гс..

Я думаю так сделать

Запускаем ЛС(логин сервер), он читает из файла сервера(ип,порт).
Далее открывает сокет для клиентов.

Клиент выполняет вход, далее ЛС высылает ему список серверов.
Клиент выбирает ГС и конектится к нему, а от ЛС отключается.

А как сообщить ГС что именно этот клиент должен соединиться? Выше читал что нужен ключ, примерно так и думаю сделать(ЛС выдает вместе с ип и портом ключ, и этот же ключ пишет в бд. Далее ГС получает логин,ключ и проверяет. В случае успеха игрок играет).

#4
19:01, 31 июля 2011

afrokick
> А как сообщить ГС что именно этот клиент должен соединиться? Выше читал что
> нужен ключ, примерно так и думаю сделать(ЛС выдает вместе с ип и портом ключ, и
> этот же ключ пишет в бд. Далее ГС получает логин,ключ и проверяет. В случае
> успеха игрок играет).
Есть чуть меньше, чем стопядцот способов сообщить из процесса А процессу Б некие данные.
Например подключиться из А к Б и передать пакет данных о будущем клиенте.
Вариант - не писать руками все операции с сокетами, а взять библиотеку раздачи сообщений - ZeroMQ (бинарные пакеты любого формата) или RabbitMQ (сложный сервер сообщений передающий XML-подобные пакеты с кучей полей согласно протоколу AMQP и данными клиента).

#5
0:31, 1 авг 2011

afrokick
> ЛС выдает вместе с ип и портом ключ, и этот же ключ пишет в бд. Далее ГС
> получает логин,ключ и проверяет. В случае успеха игрок играет
ага, надо тока определиться с тем насколько долго живёт сессионный ключ : )
это чтобы при кратковременной потере соединения (плохой канал, F5 в браузере и т.п.) не проходить авторизацию повторно

З.Ы. ну или чувак авторизовался, а на игровом сервере так и не появился

ПрограммированиеФорумСеть

Тема в архиве.