Поищи Stacked. Школа покера, или вот тут есть несколько игрушек с возможностью сетевой: [ссылка заблокирована по решению администрации проекта] Насчёт чата не уверен.
Архитектура сервера онлайн- игры на примере Skyforge / Блог компании Mail. Ru Group / Хабрахабр. Привет, Хабр! Я Андрей Фролов, ведущий программист, работаю в Mail. Ru над Next- Gen MMORPG Skyforge.
Сервер или клиент - это функции, которые выполняет компьютер. Novell NetWare Wndows NT Server OS/2 Warp Server Различные Unix серверы.
Создание онлайн-игры: основы. Существует две основные схемы
организации онлайн-игр. 1. Клиент – сервер. Есть множество клиентов,
которые . MINECRAFT - SERVER+CLIENT(WITH MODS) / МАЙНКРАФТ КЛИЕНТ+СЕРВЕР С БОЛЬШИМ КОЛИЧЕСТВОМ МОДОВ [P] [RUS] (2010) (1.3.2). . Создание сервера/клиента и простейшее их взаимодействие. 39dylib. На
таких dll написан конструктор игр в конструкторе игр.. Для того, чтобы запустить игровой сервер нам сначала нужно скачать саму игру. Архив включает в себя как клиент игры, так и сервер.
Вы могли читать мою статью про архитектуру баз данных в онлайн- играх. Сегодня я буду раскрывать секреты, касающиеся устройства сервера Skyforge. Постараюсь рассказать максимально подробно, с примерами, а также объясню, почему было принято то или иное архитектурное решение.
Особое внимание в одноранговых сетях необходимо уделить настройке клиент – сервер. Клиент должен отослать определенную информацию или команды на обработку. . Сервер игровой механики. Тут происходит, собственно, сама игра. После
прохождения авторизации клиент подключается сюда и тут . Сервер игровой механики. Тут происходит, собственно, сама игра. После прохождения авторизации клиент подключается сюда и тут играет. Игровой сервер (game server от game — игра и to serve — служить) — программный компонент вычислительной системы, обеспечивающий связь между различными клиентами.
По нашему серверу без преувеличения можно написать целую книгу, поэтому для того, чтобы уложиться в статью, мне придется пройтись только по основным моментам. Обзор. Сервер — это почти два миллиона строк кода на Java. Для соединения с сервером и отображения красивой картинки используется клиент, написанный на C++. Свой вклад в серверный код внесли полсотни программистов. Код писался в течение многих лет лучшими специалистами российского «православного» геймдева. В нем собраны все самые удачные идеи со всего мира. На текущий момент у нас написано около 5.
Сервер умеет запускаться и работать на десятках и сотнях серверов, поддерживать игру сотен тысяч человек одновременно. Мы решили отказаться от традиционной для MMO техники шардирования и запустить всех игроков в один большой мир. Первое и главное правило разработки сервера: клиент в руках врага. Клиент защищен, но чисто теоретически и его могут хакнуть, могут расшифровать клиент- серверный протокол. Взлом клиента может привести к обходу игровых правил, читам, ботоводству и т. Такие вещи разрушают игру для всех.
Чтобы этого не произошло, мы должны эмулировать весь игровой мир со всеми игровыми правилами у себя на сервере, а клиент использовать только для отображения красивой картинки. Кроме того, клиент надо проверять на взлом, отслеживая подозрительное поведение и т. Сервисная архитектура. Одна из основных особенностей разработки состоит в том, что мы не знаем, сколько у нас будет игроков.
Может быть, всего один — сам разработчик, а может, 1. Поэтому сервер должен уметь запускаться в маленькой конфигурации, на ноутбуке, и растягиваться при необходимости на десятки и сотни мощных серверов. Вторая особенность состоит в том, что при старте разработки мы понятия не имели, о чем будет наша игра, какие в ней будут особенности, сервисы и т.
Структура сервера должна быть максимально гибкой в плане добавления новых сервисов и фич. Третья большая проблема — это многопоточность. Как известно, лучший способ сладить с многопоточностью — это избежать ее. Deadlock, livelock, lock contention и другие милые сердцу программиста проблемы можно обойти, если архитектура сервера будет избавлять вас от необходимости синхронизировать потоки вручную. В идеале программист вообще должен писать простой однопоточный код и не задумываться о такого рода вещах.
Отсюда родилась наша универсальная структура сервера, которая используется в Skyforge: Существует пул физических серверов, на которых будет запускаться игра. Этот набор серверов и наше серверное приложение, которое на них запущено, называется Realm.
На каждом сервере запускается серверное приложение (JVM), называемое ролью. Роли бывают разные: аккаунт- сервер, игровая механика, чат и т. Каждая роль берет на себя большой кусок функционала.
Некоторые роли существуют в единственном числе, некоторые запускаются в нескольких экземплярах. Роль состоит из набора сервисов. Сервис — это обычный поток (thread), который занимается своей, специфичной для него задачей. Примером сервиса может служить сервис авторизации, сервис резервирования имен, балансировщик нагрузки и т. Каждый сервис ничего не знает о физическом расположении других сервисов. Они могут быть рядом, а могут быть на другой физической машине.
Сервисы взаимодействуют через систему сообщений, которая скрывает от них такого рода подробности. Каждый сервис состоит из набора модулей. Модуль — это «кусок функциональности», у которого есть один метод tick(). Примером модуля может быть модуль статистики, модуль исполнения транзакций, модуль синхронизации времени.
Вся работа сервиса заключается в том, чтобы в бесконечном цикле поочередно вызывать метод tick() у своих модулей. Один такой цикл называется «кадр сервера». Мы считаем показатель хорошим, если кадр сервера колеблется в пределах от 3 до 2. Вся эта структура описывается в XML- файлах. Системе запуска надо просто «скормить» название роли. Она найдет соответствующий файл, запустит все нужные сервисы и отдаст им списки модулей.
Сами модули создадутся с помощью java reflection. Таким образом, мы можем запустить роль «локальный сервер», где будет все необходимое, а можем разбить сервер на несколько десятков ролей — аккаунт- сервер, итем- сервер, игровая механика и т. Структура оказалась чрезвычайно гибкой и удобной, советую серьезно к ней присмотреться.
Основные сервисы. Есть некоторый набор сервисов, который несет основную игровую нагрузку. Каждый из серверов должен уметь масштабироваться. В идеале — до бесконечности.
К сожалению, писать серверы так, чтобы они масштабировались, это непростая задача. Поэтому мы начали с того, что сделали основные сервисы масштабируемыми, а всякую дополнительную мелочь, которая не несет основной нагрузки, оставили на потом. Если у нас будет очень много пользователей, то и их нам придется улучшать для обеспечения возможности масштабирования. Аккаунт- сервис. Отвечает за авторизацию и подключение новых клиентов. Сервер игровой механики. Тут происходит, собственно, сама игра.
После прохождения авторизации клиент подключается сюда и тут играет. С другими сервисами клиент напрямую не взаимодействует. Таких сервисов можно и нужно запускать несколько десятков, а то и сотен.
Именно эти сервисы несут основную нагрузку. Сервисы баз данных. Эти сервисы выполняют операции над данными игровых персонажей, их предметами, деньгами, прогрессом развития. Их обычно запускается несколько штук. Подробнее об архитектуре баз данных можно прочитать в моем прошлом докладе.
Чат. Занимается роутингом сообщений чата между пользователями. Все остальные сервисы. Их несколько десятков, и они обычно не создают сильной нагрузки, поэтому не требуют обособленных серверов.
Сеть. Под словом «сеть» я подразумеваю систему доставки сообщений от одного сервиса к другому или от одного объекта к другому. Исторически так сложилось, что у нас существует сразу две такие системы.
Одна основана на сообщениях. Вторая система основана на удаленном вызове процедур (RPC). В Skyforge система сообщений применяется внутри сервиса игровой механики, чтобы послать какое- то сообщение от аватара к мобу, а также для общения клиента и сервера. RPC используется для общения между сервисами. Сообщения. Все объекты, которые хотят посылать или принимать сообщения, называются абонентами. Каждый абонент регистрируется в общей директории и получает уникальный идентификатор — адрес. Любой, кто хочет послать сообщение какому- либо абоненту, должен указать адреса «откуда» и «куда».
Сетевой движок знает, где находится абонент, и доставляет ему сообщение. Сообщение — это Java- объект, у которого есть метод run(). При отправке этот объект сериализуется, прилетает к целевому абоненту, там десериализуется, а затем вызывается метод run() над целевым абонентом. Такой подход очень удобен тем, что позволяет реализовывать простые команды типа «нанести удар», «выдать анлок», «запустить фаербол».
Вся эта логика оказывается внешней по отношению к объекту, над которым выполняется действие. Большой минус этого подхода в том, что если логика команды требует выполнения какого- либо кода на нескольких абонентах, то нам потребуется сделать несколько сообщений, которые будут посылать друг друга по цепочке. Логика оказывается фрагментирована на несколько классов, и цепочки сообщений часто довольно долго и сложно распутывать. RPC. Удаленный вызов процедур или RPC появился, чтобы решить проблему цепочек сообщений.
Основная идея заключается в использовании кооперативной многозадачности (Coroutine, Fibers). Тому, кто не знаком с это концепцией, для понимания темы советую заглянуть в «Википедию».
Coroutine. Сервис, который хочет, чтобы его могли вызывать через удаленный вызов процедур, должен реализовывать специальный интерфейс и зарегистрировать в специальной директории. Тогда любой желающий может попросить директорию дать ему интерфейс этого сервиса, и директория вернет специальный враппер над сервисом. Вызывать сервисы по RPC можно только внутри файбера (coroutin), т. При вызове методов враппера он будет посылать RPC вызовы на удаленный сервис, прерывать текущий файбер в ожидании ответа и возвращать результат, когда удаленный сервер ответит. Таким образом, мы концентрируем логику в одном методе, а не размазываем ее по сотням сообщений.
Код сильно упрощается, его можно писать в терминах вызова функций каких- то объектов, а не в терминах посылки сообщений. Но возникают проблемы с неким подобием многопоточности, т. В целом такой подход очень удобен, когда у сервиса есть ограниченный интерфейс из десятка методов. Когда методов становится много, интерфейс лучше разбивать на несколько. Подробнее о нашей имплементации файберов можно узнать из лекции Сергея Загурского ( www. YWLHELcv. Nb. E ). Сериализация. Чтобы у нас работала система посылки сообщений и удаленный вызов процедур, нам нужен клиент- серверный протокол и способ сериализации/десериализации объектов.
Напомню, что у нас есть необходимость пересылать команды и данные с клиента на сервер, т. C++ в Java и обратно.
Для этого мы по Java- классам генерируем их копии в C++, а также генерируем методы для сериализации и десериализации объектов в байтовый поток. Код для сериализации встраивается прямо внутрь классов и обращается к полям класса напрямую. Таким образом, сервер не тратит процессорное время на обход классов с помощью reflection. Все это мы генерируем с помощью самописного плагина для Intelli. J IDEA. Внутрисерверный протокол для общения между сервисами полностью аналогичен клиент- серверному протоколу. При сериализации какого- либо класса в байтовый поток, сначала пишется id класса, потом данные полей этого класса.
Team. Speak 3 на Game. Sibnet. Ru. Team.
Speak — компьютерная программа, предназначенная для голосового общения в сети Интернет посредством технологии Vo. IP. Программы этого типа предназначены прежде всего для геймеров, но могут использоваться везде, где необходима голосовая связь и координация большой группы людей. Адрес сервера 9. 0.
Подключиться к серверу. Обсуждение на форуме. Скачать последнюю версию клиента можно здесь http: //www. Расшифровка ошибок клиента: Connection failed because the server reached its maximum amount of clients.- Соединение невозможно, потому что сервер достиг максимума пользователей.
Failed to connect to server.- Нельзя подсоединиться к серверу. File not found.- Файл не найден. Insufficient identity security level for this server. You need to improve your identity security level.- Недопустимый уровень доступа для этого сервера. Вам требуется повысить уровень доступа. Security Level" можно в Settings/Options/Identities/Improve.
Старандартное значение = 9. You are banned permanently. Reason: "No IPs in name please"- Вы заблокированы навсегда. Причина: "может быть любая".
Was banned for XXX seconds from the server by XXX (Anti- Spam measure, you are able to reconnect in ХХ: ХХ: ХХ).- Вы были заблокированы на сервере на XXX секунд пользователем ХХХ (перезайдите на сервер через ХХ: ХХ: ХХ) Вопросы по настройке клиента: Есть ли русификатор для Team. Speak. 3? Да, есть. Качаем отсюда. Как выключить все голосовые уведомления? Settings/Options/Notifications/Sound Pack/Sounds deactivated. Что такое App Scanner? Данная опция отображает в вашем профиле активное ПО на вашем ПК.
Settings/ Options/ App Scanner/ Enable application scanner. Как посмотреть вывод plugin printf debug?
Запустите клиент с ключом "- console"Как запустить несколько клиентов Team. Speak 3? Запустите клиент с ключом "- nosingleinstance" Вопросы по настройке профиля: Как сменить ник? Bookmarks/ выберите сервер/ Nickname; временно: правой кнопкой по нику/ Change Nickname. Как установить аватар? Правой кнопкой по своему нику/ Set Avatar.
Как одновременно подключиться к нескольким серверам? Bookmarks/ выделите нужный сервер/ More/ поставьте галочку на Connection Startup. Как при подключении на сервер автоматически заходить в нужный канал? Зайдите в нужный вам канал/ Bookmarks/ More/ Make current default (не забывайте про пароль).
Как работает система бана? Клиенты могут быть забанены по любой комбинации IP, юзернейма (включая регулярные выражения) и уникального идентификатора. Я установил клиент, а плагины не активируются?
Плагины нужно активировать вручную. По умолчанию все плагины деактивированы. Чтобы активировать их, пройдите в Settings/ Plugins и активируйте желаемый плагин.
Как переместить личный ключ на другой компьютер или создать резервную копию? Экспортируйте учетку в окошке управления учетными записями в клиенте Teamspeak 3. Файл экспорта может быть перемещен на другой компьютер и импортирован, или он может быть перемещен на сервер с целью бэкапа. Я вижу поле пароля в закладках и в окне подключения, но я читал, что Teamspeak 3 не использует пароли? Это опциональное поле для пароля на сервер. Он один и тот же для всех пользователей и не имеет ничего общего с аутентификацией пользователя. Инструкция взята с game- pub.