|
Вопрос # 5 873/ вопрос открыт / |
|
Здравствуйте, эксперты!
Делаю игру и меня интересует вопрос: Можно ли в Delphi реализовать быстрый поиск серверов к данной игре (в интернете). Как CStrike за минуту находит до 1000 серверов. Работаю с Indy.
 |
Вопрос задал: Данилыч (статус: Посетитель)
Вопрос отправлен: 12 января 2012, 11:40
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Данилыч!
Ответ: да, возможно. Самый простой вариант такой - каждый сервер, который желает быть публичным, отмечается в специальном сервисе (что это такое - ниже).
Теперь клиентам, которые хотят найти сервер для игры, нужно просто выкачать список с сервера и готово.
А теперь о деталях реализации. Например на базе MySQL (другая любимая база)+ php (python|perl|любимый язык).
Страница регистрации - обычный скрипт, который в качестве параметров получает адрес сервера, имя и какие то параметры (кол-во игроков, расположение, карты), проверяет наличие в базе записи для этого сервера и добавляет/обновляет запись. Сервера регулярно обновляют свои данные.
Страница получения данных. Просто делается с базы выборка серверов, которые регистрировались за последние 10 минут (оптимально интервал должен быть не больше двух периодов обновления данных от серверов).
Плюс добавляем ещё один скрипт, который время от времени будет удалять старые записи. И, по надобности ещё один, который будет брать произвольный сервер с списка и проверять его на вшивость:) Мало чего.
В качестве базы данных можно использовать Redis - это очень интересная база данных (хотя это не совсем база данных). В ней можно хранить ключи с значениями, которым указать срок жизни.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 12 января 2012, 12:51
|
Мини-форум вопроса
Всего сообщений: 8; последнее сообщение — 14 января 2012, 20:37; участников в обсуждении: 3.
|
DNK (статус: Студент), 12 января 2012, 12:51 [#1]:
Скорей всего все сервера регистрируются на каком-нибуть центральном, адрес которого игре известен, и вместо поиска с него просто запрашивается готовый список. Чтобы в возвращаемом списке не было "мертвых" серверов, центральный можно настроить на переодический опрос зарегистрированных.
"Digital Networked Knight"
|
|
Данилыч (статус: Посетитель), 12 января 2012, 19:40 [#2]:
То есть нужно создать сервер на которых хранится список всех доступных серверов. А есть ли готовые бесплатные сервера? Например с максимальной длинной списка 5МБ.
|
|
Вадим К (статус: Академик), 13 января 2012, 13:38 [#3]:
Навряд ли вот так существуют. Я по крайней мере не встречал.
Но никто не мешает Вам сделать свою распределенную систему Суть очень проста. Реализация немного сложнее. Представьте себе, что серверов много. Значит есть вероятность, что хотя бы один из них в какой то момент будет онлайн.
В программе храним полный список серверов. При подключении (поиску) подключаемся к первому попавшемуся и запрашиваем у него обновленный список, который собственно и выкачиваем. Если он недоступен - идет на второй и так далее. Конечно, нужно разрешить вводить ручками начальный адрес.
Сервера между собой соединяются в сеть и обновляют списки друг дружки регулярно. По такому принципу построены eMule и скайп.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Данилыч (статус: Посетитель), 13 января 2012, 14:07 [#4]:
Точно. Не думаю что в игре будет более 100 серверов, можно хранить и весь список на каждом сервере, тогда нужно будет найти только один сервер.
Но можно ли хоть где-то в интернете разместить IP одного сервера? Он будет давать всем список а при выключении передаст свой титул любому другому рабочему серверу.
|
|
DNK (статус: Студент), 13 января 2012, 20:44 [#5]:
Разместить IP одного сервера можно через DNS.
"Digital Networked Knight"
|
|
Данилыч (статус: Посетитель), 13 января 2012, 20:58 [#6]:
Это как? Поподробней, желательно с кодом
А менять IP программно можно будет?
|
|
DNK (статус: Студент), 14 января 2012, 20:22 [#7]:
gameserver.vasya.com
типо того. А какой адрес за этим именем будет скрываться, это уже как настроишь.
"Digital Networked Knight"
|
|
Данилыч (статус: Посетитель), 14 января 2012, 20:37 [#8]:
А как программно менять адрес?
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|