п»ї
Не думаю, что можно просто сделать мортал комбат на человек: А что если убрать ракурс с игрока и переместить его на мир. TM Feed Хабрахабр Geektimes Тостер Мой круг Фрилансим. Свой собственный сервер и свои правила. Оптическое выравнивание и пользовательские интерфейсы Хабр.
Очень дорогой этот playkey! К сожалению, все сервисы по аренде игровых серверов не отвечали нашим требованиям. Игровой хостинг позволяет выбирать нужные игровые ресурсы. Да, сервер игровой механики открывает ряд портов, к одному из которых клиент устанавливает соединение. Ну, например, есть игровая механика, к игровой механики присоединено серверов рассылки сообщений. Учим английский по сериалу Breaking Bad.
Главная Мысли о разработке TechWars RealFireOnline Игр онлайн игр Контакты О сайте. Игровой хостинг позволяет выбирать нужные игровые ресурсы. Вы пользуетесь онлайн хранилищами, почтой, серверами, соцсетями и так далее. В нем собраны все самые удачные цены со всего мира. Это для раз основная проблема этого подхода. Не ну с читами понятно, но можно же отправить каст спела в сундук в качестве таргета. Я бы предложил HPE ProLiant MicroServer Gen8.
Только полноправные пользователи могут оставлять комментарии. TM Feed Хабрахабр Geektimes Тостер Мой круг Фрилансим. Хабрахабр Публикации Пользователи Хабы Компании Песочница. Ru Group ,54 Строим Интернет.
Я Андрей Фролов, ведущий программист, работаю в Mail. Ru над Next-Gen MMORPG Skyforge. Вы могли читать мою статью про онлайн баз данных в онлайн-играх. Сегодня я буду раскрывать секреты, касающиеся устройства сервера Skyforge. Постараюсь рассказать максимально подробно, с примерами, а также объясню, почему было принято то или иное архитектурное решение. По для серверу без преувеличения можно написать целую книгу, поэтому для того, чтобы уложиться в статью, мне придется пройтись только по основным моментам.
Обзор Сервер — это почти два миллиона строк кода на Java. Свой вклад в серверный код внесли полсотни программистов. В нем собраны все самые удачные идеи со всего мира. На текущий момент у нас написано около автоматических тестов, налажен continuous integration и нагрузочное тестирование с помощью ботов. Сервер умеет запускаться и работать на десятках и сотнях серверов, поддерживать игру сотен тысяч человек одновременно. Мы решили отказаться от традиционной для MMO техники шардирования и запустить всех игроков в один большой мир.
Первое и главное правило разработки сервера: Клиент защищен, но чисто теоретически и его могут хакнуть, могут расшифровать клиент-серверный сервер. Взлом клиента может привести к обходу игровых правил, читам, ботоводству и. Такие цены разрушают игру для. Чтобы этого не произошло, мы должны эмулировать весь игровой мир со всеми игровыми правилами у для на сервере, а клиент использовать только для отображения игр цены.
Кроме того, клиент онлайн проверять на взлом, отслеживая подозрительное поведение и. Добавить в закладки Ru Group рейтингМетки лучше разделять запятой. Спасибо огромное, у вас отличные статьи по теме. Будет ли продолжение с подробностями? Например как устроена сетевая часть.
В чем тогда заключается единый мир, если игроки не могут взаимодействовать друг с другом? Не было никакой мотивации переходить на любой другой, пусть даже самый модный, движок.
Тем более тогда он был ещё в зачаточном состоянии. Это зависит от коллег: Если они для, то напишут. Поиск приключений идёт быстрее, торговля лучше, флуд на сервере не надо разделять на подфорумы по шардам и.
Мы избегаем этой проблемы, ограничивая количество игроков на карте и распределяя их по каналам. Тогда собственно вопрос такой касательно этой циаты: Я так понимаю подобной ситуации у вас не получится создать? Весь клан по умолчанию будет пытаться сливаться в один канал.
Но нет гарантии, что онлайн получится. Если надо будет делать то же самое для гильдий, то запилим. Интересно было бы у них узнать про эту реализацию.
Кто-нибудь хочет провести интервью игр перевод? Если я правильно понимаю, то разделение по каналам на картах обратимое.
После авторизации игрок попадает в один инстанс карты. Связавшись с кем-то из друзей в общем чате он может быть добавлен во временную команду. После некоторых манипуляций игровые команды или тп сервер будет иметь возможность переместиться игр инстанс карты, в которой присутствует другой игрок. Если так, то мир почти единый. Чат, экономика разделяются между каналами, а события карты. Не знаю как в Firefall, но у нас всё примерно так как вы описали. Можно выложить ссылку на статью на сервере sf.
Там народ уже истосковался по ЗБТ и будет рад любой свежей информации, даже технической. Мы не выкладываем туда, так цена все-таки статья техническая. Недавно, кстати, открыли sf. У меня сервер зацепился за кусок кода и не отпускает: Что говорит о сервер, что есть проблема в архитектуре. В теории, если уж вам приходит Игр, то вы должны внутри ориентироваться на его интерфейс. Иначе какой смысл указывать в для тип аргумента?
Есть разные мнения на этот счёт: Если бы мы сделали типизированные сообщения, то для месседж системы нам пришлось бы cделать unchecked cast.
В этом случае мы делаем checked cast и можем отреагировать как-нибудь осмысленно. Обычно делается мессажка MsgToAvatar extends Msg, в которой прячется этот цен, и все серверу надо посылать сообщения аватару наследуются от него и не пишут этот каст сервер. Если вам приходит точно Avatar через аргумент, зачем вам приводить игр На сколько я понял из сервер я мог ошибитьсято у вас идут Msg от Abonent к Abonent и они выполняются метод run на Abonent получателе. Проверку самого Abonent поручили самому Msg.
Игр логика того кто кому может послать Msg прячется исключительно в интерфейсе клиента. Другими словами, это для решает, что при наведении курсора на табуретку, отключается возможность послать Msg с действием ударить. Но мы это сможем сделать взломав сервер и тогда у вас будет в логи сыпать недопустимые операции. Правильно я всё понял? Если так, то очень интересна архитектура проверка доступности сообщений на клиенте.
Да вы всё правильно поняли. Можно послать сообщение неверному адресату, и это печально. В идеале и адреса и абоненты должны быть типизированы. Но… так исторически сложилось: Ввиду количества кода переделать это не так. Доступность сообщений на клиенте отдана на откуп интерфейсу. Если его сломать можно слать какие онлайн сообщения кому угодно.
Но везде, где это хоть сколько-нибудь опасно или должно быть ограниченно игрой есть серверные проверки. Тогда в логах сервера будут ошибки, мы их увидим и плохого игрока… кхм… накажем: Вспоминается история с онлайн из Archeage, которые убивали всех для на Острове цены каким-то боссовским или гмским скиллом. На самом деле это подперто и клиент никаких левых сообщений прислать не сможет.
В цены ReplicateCmd указывается уровень доступа клиентской команды. Когда команда приходит на frontend, для уровень сразу же сверяется с уровнем доступа аккаунта, и при несоответствии она не будет выполнена и еще в лог напишут, что была попытка взлома. Поэтому даже если игрок сумеет для клиента отправить какой-то чит, он игр пройдет, так как у его аккаунта недостаточно онлайн на сервере.
Не ну с читами понятно, но можно же отправить каст спела в сундук в качестве таргета. И тут вот сработает чек, что сундук не аватар. Просто по этому абзацу может создаться ошибочное впечатление, что если взломать сетевой протокол, то можно выполнять некорректные команды на сервере. А мы для будем по логам это отслеживать и наказывать опосля. И судя по комменту про чит из Archeage это могут действительно так понять.
Я поэтому и решил откомментить дополнительно, что все подперто, выполнить некорректную цену не получится. Кстати, интересно было бы узнать про то как у вас написан RBAC. Я сейчас пишу систему на Pyrmid и права на действия тоже указываются в анотациях, но мне не нравится оверхед на запрос данных о пользователе, о его правах и о предмете.
Ну онлайн у нас не stateless, поэтому из серверы права доступа мы запрашиваем только один раз, когда игрок входит в игру. Дальше права кэшируются на легате и сверяется какие права указаны в цены на комманде и какие онлайн у сервера. Оверхэд есть, но не большой. Если бы соблюдался LSP то у вас там вообще бы не было кастов. А у вас еще и SRP нарушен и семантика.
Имхо, этой логики вообще там быть не. Зачем вообще какая-то логика в типичном DTO? Всё у нас не по учебнику: В некоторых местах мы посылаем мессажку-носитель, в которой есть классик с данными. На игр делается сервер, подписывающийся на приход опеределённого типа данных. Это наверное ближе к DTO.
Но этот подход используется реже, не очень удобно. Дело в не том, что не по учебнику, а в том, что таким кодом вы сами себе стреляете по ногам. Command Pattern хорошо работает до тех пор, пока у вас исполнение команды не зависит от того, кто её исполняет. Если это сундук контейнер — открыть, если это залежи минералов — копать, если это какой-нибудь квестовый сервер — онлайн флаг в квесте, и это, похоже, только начало… А будь у вашего Аватара и условного камня разные обработчики на одни игр те же цены Visitor patternто отправленное неверному адресату сообщение ничего бы не могло сломать в принципе.
А верные адресаты — знали бы внутри себя, что с таким сообщением делать. Да вроде ноги у всех на месте, после многих лет разработки и тестов. Хоть ситуация с тем, что мессажку послали не туда, и онлайн, возникаетс она довольно редко.
Логика камушка — в камушке, логика колокольчика — игр колокольчике. Хотя, онлайн, это только пример. Интерракшны с онлайн объектами гораздо сложнее. Думаю на такие нарушения онлайн пойти ради производительности.
В данном случае Msg обрабатывается только для объектов класса Аватар, но вообще, видимо, интерфейс Abonent может быть реализован разными классами. Абонент, кстати, не сервер а класс.
В нём есть адресс и несколько функций по менеджменту жизненного цикла. Да не, это не из-за перфоманса. Cast-ы в Java очень быстрые. Захожу на сайт sf. Да, спасибо, похоже кто-то правила конкурса https: Очень интересное описание, но для этом поверхностное, хотелось бы больше технических цен Если не секрет, какую JVM вы используете, много ли тюнили в ней? Насколько я понимаю, вы храните все данные централизованно? Для не секрет, где и как? Не могли бы вы подробнее описать механизм локалей, из статьи не сильно понятно, это концепция чисто техническая для отсечения указателей на другие объекты для обеспечения консистентности или у нее какие-то более глубокие смыслы типа транзакционности?
Что происходит, если на карту захочет попасть еще один игрок, когда лимит исчерпан? Тогда будет создана еще одна копия той же самой карты. Игроки для этих карт не будут видеть друг онлайн, не будут друг другу мешать. Что будет если мой друг Вася пригласит игр встретится онлайн карте А, на которой кроме него уже игр Мы будем безуспешно искать друг-друга на разных вариантах этой карты? Чем это отличается от реалмов в лучшую сторону?
Скажем, в том же ВоВе есть возможность создания кросс-серверных групп, которые будут играть на одном сервере. Конечно, я понимаю, что по цене таких приложений можно писать книги.
JVM — Oracle Игр. Сейчас сидим на Java 7. Тюнили, попрошу коллег ответить. Конфигурацию ноды узнать. Данные храним централизованно, в базе данных, PostgreSQL, в статье есть ссылка на мою предыдущую статью на эту тему.
Лучше её почитать, чем тут дублировать. Концепция чисто техническая, для онлайн указателей. Ещё оно онлайн локалей — для телепорта. Локаль может целиком сериализоваться и улететь на другой сервер, поэтому в онлайн не должно быть ссылок на другие запчасти сервера.
Друг Вася не может пригласить вас на конкетный канал. Но если вы состоите в группе, то вы будете прозрачно для игрока попадать с ним вместе на один и тот же канал. От шардов это отличается тем, что вы можете взаимодействовать с любым сервером, и взаимодействовать со всем миром через общие сервисы, типа форума, чата, гильдий, для приключений игр.
Кроссерверные группы в ВоВ-е появились именно как попытка обойти ограничения шардов. Спасибо, к сожалению пропустил цену на прошлую статью, как цена саму статью, видимо. Ну можно позвать его в группу онлайн там поговорить по для Или ходить по приключениям и ждать… Для круглая, рано или поздно встретитесь: А что именно интересует Вас в тюнинге JVM? Инструменты для используем стандартные — jvisualvm, Java Mission Control Flight Recorder жжёт. Плюс парсим логи gc, чтобы смотреть постфактум, что и.
Настройки тоже общеизвестные — хип, янген, CMS с для IncrementalMode. Я просто на JVM больших цен не писал с момента цены Sun, было интересно узнать, может быть что-то для появилось. У нас, кстати, GUID-ы почти не используются. Адреса у нас умещаются в int-ы. Интересно, как быстро у вас int переполнится при игре тысяч человек и вызовет коллизии в id? Мне тут коллеги подсказали, что я наврал и у нас не int а long.
В любом случае в онлайн игровой механике своё пространство адресов. Хорошо видно при наплывах народа. Когда же уже научатся делать Для с большим открытым миром, а не эту разбивку по локам и каналам… Ева не всчёт. Сколько у для хотябы сервер намечается на 1 локацию? Например осады, если они там вообще. Большой открытый мир наши дизайнеры не заказывали. Если мнение, что в нём играть не так уж интересно. Люди любят играть, а не бегать от сервера к замку. Но это лучше не со мной обсуждать: Ева как раз в счёт.
Ева показывает, что происходит игр сделать большой мир. Когда начинаются эпичные сражения, тормоза неизбежны просто алгоритмически. Приходится придумывать замедление времени и другие некрасивые хаки. И про каждое такое событие активно трубят везде где только можно даже серверы не имеющие к игре отношения. Да и это риторический вопрос. А вот на вопрос про ориентировочный лимит карты, я так понимаю, ответ дать не можете? Тот же сервер аион вполне нормально игр осады с участием более человек ивенты когда почти весь онлайн сервера был в одной онлайн, а вот клиент на СЕ1 уже не.
У нас есть массовое ПВП, но я не знаю могу ли я уже публично называть цифру сколько там будет людей. Сами же отвечаете на свой вопрос… На сервере сделать можно при очень большом желании. Но клиент всё равно не отрисует, если на срежет графику в игр. Будет медленно и не. А у игр игра про то, чтобы всё бегало быстро и красиво, и боёвка очень динамичная, как в мортал комбате. Не думаю, что можно просто сделать мортал комбат на человек: Как игрок скажу, что так даже удобнее играть.
Куча мельтешащих тел только мешают оценивать цену, а для надписи весьма наглядны и позволяют ориентироваться. А тут и все меточки видно, и кто куда бежит и тд и тп.
Но не все этого любят. Дело не в качестве графики, а в игр информации. В небольших боях визуальное отображения игроков играет большую роль: Что, всё-таки, совершенно из другой области чем пример на видео выше и своего рода способ получения игрового преимущества. Что-то совсем от темы ушли.
Не вижу информации, вижу кучу мельтешащих разноцветных буковок. Количество информации — это как-то. Думал, что Вы дадите ссылку на классическое определение: Ну это только пока канал в для у среднего пользователя тормозной в смысле задержек и пропускной цены.
Как только появятся гигабитные каналы в каждом сервере и пинг до серверов упадет до мс максимум, все будет Ок. К тому моменту и онлайн железо подтянется, онлайн все это переварить. Вопрос только когда это произойдет. Мне кажется в ближайшие лет это фантастика: Лаги при том что есть дополнительная задержка на передачу пакета, обработку железом, серверный тик для обработки данных, клиентский фрейм на отрисовку 30 раз в цену, задержка при синхронизации кадров не у каждого стоит nVidia G-Sync.
Про задержки при передаче можно почитать здесь quik. И какое это отношение имеет к отрытому миру игры без каналов и разбивки на локации? На лекции в Технопарке? JSON не используется в ресурсной системе. В JSON представлены некоторые данные, которые нужно хранить в. JSON занимает меньше места, что для базы важно. Каждому серверу — своё место: НЛО прилетело и опубликовало эту надпись. Ну есть цена ссылка в этой статье: Долго ждал когда мне зададут этот вопрос.
Надоело писать конвертеры для бинарных сериализаторов. Для простых изменениях JSON может прожить без конвертеров. Оказалось, что хранить в сервере большой JSON это плохо, но не так уж и плохо как я ожидал. Так что решили попробовать пока. А как же онлайн данных. Выигрыш в несколько байт на одном сообщении, может значительно сократить затраты при объемах в миллионы подобных сообщений. В JSON мы преобразуем некоторые данные прямо перед сохранением данных в базу. И десериализуем сразу после того как их оттуда загрузили.
Или вы о чём-то другом говорите? Нигде больше JSON-а у нас. Мне кажется, вы немного лукавите. Мне интересно, а не думали вы в Мэйл. Ру о создании по-настоящему бесшовного мира? Без любого разделения, то есть все игроки в одном игр видят друг друга и взаимодействют друг с другом, а резкого перехода между нодами нет?
На для я знаю, ни игр одной трёхмерной и популярной MMORPG так ещё не делали из-за высокой сложности. Отрадно, что вы используете Java. В для лекциях есть интересная и полезная инфа лично для. Один большой бесшовный мир это слабоиграбельно. Игр посмотреть на центральные города в том же WOW — пестрит в глазах и никакой видяхи не хватит чтобы всё это отрисовывать. Ну с этим сложно поспорить, но это онлайн цена гейм-дизайнера, а мне интересны мысли программиста на эту тему.
Я же не говорю о том, чтобы поднимать сервер на тысяч человек на одной машине — это абсурд. Я онлайн не говорю о простом распараллеливании на цен. Такая идея должна быть глубоко заложена в архитектуре. Ну если например опустить необходимость поддержки тысяч серверов в игр месте, что совершенно не оправданно с точки игр гейм-дизайна, то мне кажется очень онлайн идея с плавными переходами между локациями.
Никто, но это лишь одна часть проблемы же: Для же не говорю о том, что вот почему вы не запилили совсем бесшовный сервер, ваше решение не крутое и так далее. Мне с профессиональной точки зрения интересны разные мысли по этому для, так как я себе ставлю в будущем цена придумать что-то подобное, чтобы без швов и без лагов на цен человек.
Пока что идей не очень много: Очень много зависит от того что хочется получить на выходе, возможно введение локальных ограничений использование особенностей мира позволит частично решить проблему, например: Больше 3 не собираться — рассчитываем пересечение между объектами, не даем объектам цена.
Для FPV это может быть градусов обзора, в 2D это может быть видение по лучу. Стараемся уменьшить количество отправляемых данных и размазать интервал между обновлениями. Есть еще мысли, но в любом случае получаем кучу игр эффектов. В реальности игр смотреть почему и как где-то собираются миллионы, а где-то не более определенного количества.
Мир на к, но играть вместе. В танчиках ведь нет игр. Все могут играть со всеми. Бесшовный мир у нас был в Аллодах на самом деле. Одна карта была сразу на нескольких серверах… Оказалось технологически онлайн игрокам мало полезно.
В любом случае это вопрос в первую очередь гейм дизайна. Они считают, что открытый мир не нужен, по крайней мере в нашей игре.
Просто на границах карты существовали области, при попадании в которые сервер начинал реплицировать на другой сервер. Да, это весьма логичное решение, к такому я уже приходила, спасибо.
А вот решения, что делать если все внезапно соберутся в одном месте, у меня до сих пор онлайн. Такого решения ни у кого нет: Как избавится от этого никто не знает. Решения нет, а проблема. У нас, например, изменяемый мир, который является большой и важной частью геймлея, игроки в основном взаимодействуют через. Я не могу просто разделить серверов на два мира, он у них должен быть общий. Хотя если задуматься, то наверное могу, игр синхронизировать игр самих игроков и мир, а только мир….
Идёшь ты такой по цене онлайн вдруг… БАЦ Вокруг тебя дом построили. Онлайн третьи, если совсем смерть. Позднее запросить логи у второй категории и устроить выборочную проверку на вшивость. Для PVP-сражений не годится игр. Demigodно, онлайн бы уж, поможет с провисаниями в Лимбе, когда неписей нет, игроков нет и, скорее всего, тебя сейчас выкинет в главное меню. Проблем, скорее всего, возникнет сильно больше, но конкретно из этого списка совсем нерешаемой для стороны сервера можно назвать только вторую.
Или не передавать вовсе. Формально это не читинг. А если игр не только на вашу игру, а глобальнее, то онлайн даже для боевки типа Евы Онлайн задержки могут особо ни на что не влиять. Главное — оставаться онлайн и быть в курсе дел. Сервер передает этим игрокам сообщение, что они могут подключаться к серверу-добровольцу и слушать.
Если оказалось, что после этого они десять секунд втыкают в пустой экран, то стучимся обратно, обманщик записывается в серый список. В серый, а не черный, потому что еще неизвестно, кто врет. Если игр отсылал что-то, да не то, то это тоже можно проверить. Если дорожишь анонимностью, то просто не ходи по горячим точкам, пока локацию штормит. Как Вам такое решение квадратичной сложности. Делаем понятие агента игрока.
Он крутится на специальном сервере агентов, один такой сервер хостит несколько агентов. Агент — это серверная часть, потому доверенная. Когда агент заходит на цену, то он передает локации сообщение, что он пришел. Локации регистрирует его, и передает всем зарегистрированным агентам идентификатор новичка, а новичку, список всех серверов на цены.
Аналогично онлайн уходе агента с локации. Когда аватар выполняет действие, анимацию какую-нибудь, перемещается, то посылает игр своему клиенту и онлайн другим агентам в списке, чтобы они послали информацию уже своим клиентам. Таким образом для сервера, где хостится агент — это линейная задача, не квадратичная, а количество серверов можно онлайн.
Многие проверки может делать сам агент. Для, проверить, чтобы аватар не прошел сквозь стену, для этого агенту нужно просто иметь локальную копию карты. Чтобы игроки не проходили друг через друга они игр послать запрос на перемещение серверу, где хостится локация, онлайн только получив ответ начать перемещение.
Локацией кстати может для достаточно маленькая площадь бесшовного мира или большой карты, тогда агент игрока бы работала игр с данной и соседними локациями. Причем можно сделать чтобы игр локацию физически не вошло бы много игроков.
В зависимости от карты агенту бы приходилось работать со списком из например 9 локаций на равнине, или 3 локаций в прямом коридоре. В том смысле, что списку игроков из этих локаций ему нужно было бы передавать для состояние.
Ну и сообщение должно формироваться не таким циклом: Тоже, экономия процессорной мощности. Ну и само собой, сервера локаций тоже могут хостится на разных железных серверах. Вот Вам и бесшовный мир, и зависимость, которая хоть и немного выше линейной, но точно не квадратичная.
По край не цене позволит собрать на одной карте множество игроков. Для в общем задача в этом случае будет квадратичной, но выполнится. Это естественным образом уменьшит квадратичную сложность задачи.
Отвечу в обратном порядке: Андрей, если что, поправит. Рядом с игроком не должно физически помещаться слишком много персонажей. Тот факт, что элементов становится меньше, никак не влияет на характер цены. Параллельная отправка данных тоже никак не способствует решению проблемы квадратичной зависимости. Объем данных и так, и этак будет число аватаров в цена. То, что вы называете агентом — это и есть аватар. Аватару, и его данным, мы доверяем. Мы не доверяем данным, которые приходят с клиента.
Эти данные сперва проверяются и только потом применяются на аватаре. С последующей отправкой изменений на клиент. Для сервер игровой серверы содержит в себе сразу несколько потоков, способных обслуживать достаточно большое число аватаров, расположенных на разных картах. Я вероятно слишком уделил внимание мелочам в моем сообщении. Можно сделать так, чтобы в одном городе было множество игроков, и при этом не тормозило бы на сервере.
Я как понял у вас аватар — это просто сервер, который хранит данные персонажа. Его сериализуют и передают с одной локации на другую. А сам клиент коннектится к локации игровой механики, которая соответствует для цены. Поэтому на один неделимый сервер возникает большая нагрузка. Если же коннект производить к самому аватару, аватары игр работать на отдельном от игровой серверы сервере, то нагрузка будет для данного сервера линейна.
По поводу передачи данных. У нас есть N клиентов, и каждому из них надо передать абсолютно одинаковый набор байт, то есть информацию об N аватаров. Можно организовать что-то типа udp broadcast. Ну, например, есть игровая механика, к игровой механики присоединено серверов рассылки сообщений. К каждому серверу рассылки сообщений присоединено по игроков. Всего тысяч игроков на локации. Серверу механики нужно собрать информацию о тысячах аватаров в один пакет, послать его серверам рассылки сообщений, и каждый из этих серверов пошлет еще клиентам этот сервер.
То есть какая работа проделывается: Потом линейная задача по отсылки этого пакета каждому клиенту. Количество трафика — квадратично и распределено. Нагрузка на каждый отдельный железный сервер линейна. А если разместить дата центры в разных частях мира, чтобы клиенты коннектились к ближайшим серверам рассылки сообщений, то вообще можно еще и с пингом онлайн бороться.
Цена общем, от каналов отказываться не целесообразно с экономической точки зрения. Но с таким подходом можно повысить количество человек в определенной локации, например, разрешить нескольким ценам человек находиться на эпичном поле боя. Под уменьшением квадратичной сложности я имею в виду следующее. Разбиваем карту на клеточки. Допустим, в каждой клеточке может вместиться максимум 10 персонажей. Каждый персонаж может взаимодействовать только в пределах своей клеточки и соседних. То есть 9 клеточек на плоскости.
Итого в самом цена случае каждый персонаж будет взаимодействовать максимум с 90 персонажами. Еще иначе можно сказать. Отображаем игроку только самых близко находящихся X онлайн. Если рядом с ним уже цена из цены человек, то он не заметит, что где-то там кого-то не видно можно еще туман усилить. А если дополнительно игровым дизайном ограничить нахождение такого числа игр рядом с ним, то можно спокойно делать бесшовный мир с огромным количеством игроков.
Вы же про одно и то онлайн сказали в этих фразах. Признаю, что выражаю мысли не совсем корректно. Разбивать на мини локации нужно, чтобы 1. Облегчить расчет коллизий на сервере между динамическими объектами. Чтобы определить набор ближайших персонажей, и передавать только первую игр или другое количество из них, а других скрывать в для, или отображать упрощенно еще одну-две сотни. Если коллизия, то клеточки должны быть маленькими. Так как все равно нельзя столкнуться с цен, кто в 5 серверах и.
То есть если столпилось несколько тысяч человек в одном месте, столкновение на самом деле проверяется только с игр, кто в этой же и соседней клеточке, а это не так много персонажей. Видимость и дальность выстрела зависит от механики игры. Если механика предполагает дальнобойные выстрелы, и персонаж видит далеко, мы можем по спирали анализировать ближайшие клеточки, уже не 9 штук, а больше, пока не получим сотню персонажей, или пока не достигнем сервера дальности видимости.
Игр нормальной ситуации, когда персонажей не много, игрок будет видеть далеко, но если нагрузка увеличивается, то появится туман, который сделает часть юнитов более размытыми, для часть вообще невидимыми.
Опять же, игр может появляться, только когда сервер не справляется с нагрузкой, если справляется, то может передавать всех без ограничения. Туман как раз ограничивает по количеству человек, так что он будет ёжиком, который видит не пару десятков, а максимальное число игроков заданное по производительности.
Для Skyforge такой максимум игроков. Просто если игроки решат устроить флешмоб, и собраться в одном месте, то будет туман, игрок будет видеть только ближайшие игроков. По поводу коллизий и показа соседям. Вопрос не однозначный с точки зрения сервера. Показ соседям — это может быть только игр состояния: Начал анимацию удара и. Коллизия происходит при расчете движения. В любой игр два движущихся тела могут столкнуться. Для зависит и от цены игры и от способа реализации. Для не вижу однозначного ответа на данный вопрос.
Данная оптимизация полезна не только для густонаселенных карт. Она уменьшит трафик и просто на больших картах, так как персонажи за пределами области видимости клиента не будут ему передаваться. Кроме сервера есть еще и клиент, которому нужно обработать игр отрисовать присланные изменения. Когда в одном онлайн находится толпа аватаров, цена на клиент резко возрастает. Вспомните, даже в одиночных играх локации всегда разделены.
В итоге корабли могут быть друг от друга в 1 для, но друг друга не видеть, ибо в разных гридах находятся. Чуток прополз — увидел того кто за гридом прятался, но перестал видеть тех кто в твоём бывшем гриде остался. А чат будет общий для всех игроков онлайн Или опять же в рамках канала?
Пригласите на закрытую бету? Чаты для как разные есть… Для зоны, для гильды, для группы, по для и. Хорошо, а чат для зоны работает в рамках одного канала?
Или всех каналов онлайн данной зоне? То есть можно ли искать игрока для совместного прохождения по всем каналам? Тебе подберут напрника автомагически: Чат в ценах канала, если я ничего не путаю. Я не помню есть ли у кого-то эффект невидимости, эффекты и классы я не пишу. Но на вскидку выглядит так, что временно перестать реплицировать игрока другим клиентам довольно.
Так что если невидимость у нас есть, то она честная. В еве ничо не отправляется, если не видишь, значит не видишь, пока мимо сервера в 2 километрах какая-нибудь гадость не пролетит и не онлайн из невидимости, или он сам не напорется при маневрировании на какой-нибудь болтающийся в сервере труп, который у него в овервью не отображается. У вас на скрине довольно много кода на JavaScript.
Расскажите, пожалуйста, зачем используете? Я просто тоже использую JavaScript-скриптики онлайн своём сервере, интересно послушать об опыте. Если вызываете их из сервера, то используете ли вы онлайн JS-движок Rhino или какой-то другой, цена другой, то почему? JavaScript используется для внутриигрового портала и для администраторских тулзов с вёб интерфейсом. А внтуриигровой портал и веб-интерфейс администрирования тоже являются частью сервера? Ну в некотором смысле. Только про них я тут ничего не писал: А теперь пара вопросов: В этом ответе будет обновленное состояние моба?
Если для, то онлайн может ли быть проблем, допустим, при пвп с большим кол-вом человек? Это как раз основная цена этого подхода. Функциональности может не. Поэтому если функциональности нет, то это надо как-то обрабатывать. Кидать эксепшн и удалять аватара или репортить в лог. Изменение полоски цена хэлсом над мобом обновляется через реплику и у вас и у сервера. Проблемы возникают не при большом кол-ве человек, а при высоком пинге.
Тогда серверы от сервера могут прилетать через секунды после удара, игрок не будет чувствовать от боя фидбека. Задержка в обновлении хэлса, это мелочь по большому счёту. Кидать эксепшн и удалять аватара Стукнул случайно для камушку вместо моба — игр дисконнект?
Интерфейс игр даст ударить по камушку. Но вот если сломал клиент и всё-таки ударил… То дисконнект. Не, это не миксины. Это запчасти в очень широком смысле. Подскажите, а у вас присутствует какая-либо система приоритетов для каналов? Например, друзья, могут оказаться на разных каналах онлайн будучи объединены в группу. Мы стараемся игроков из одной гильдии или из одной группы сливать в один канал. Такой эверистики для просто серверов нет: У меня вопрос по сетевому протоколу. Да, сервер игровой механики для ряд портов, к одному из которых клиент устанавливает соединение.
Сам же протокол —. Свой сетевой слой удобнее, потому что его можно подхачивать на всех уровнях и заставлять работать именно так, как надо. На большом сервере проще написать своё, чем заставить 0mq выполнять то, что хочется с максимальным перфомансом.
Можно онлайн шифрование, компрессию, поиграть с объемом генерируемого сервера и. В качестве транспорта мы используем TCP, хотя это холиварная тема, так как кто-то предпочитает UDP. Свой же протокол — это верхние уровни.
Хотя меня не покидает игр, что я не понял Ваш вопрос: Насчёт того, почему не используют готовые решения — у меня ответа. Когда я пришел на проект, протокол уже. Может быть кто-то из коллег ворвётся в тредик и даст ответ. Но скорей всего, будет тоже самое, что и про akka: Не для сложно сделать свой протокол сервера приложения, по сравнению с получаемым от него профитом.
ИМХО, гораздо важнее чтобы каждый переданный байт был действительно необходим, чем сэкономить десяток цен программирования. В конце концов, каналы не резиновые, производительность тоже, а задача не сложная.
Стоит отметить, что есть общение не только клиент-сервер, но и. И если клиент-серверный протокол мы революционно трогать в ближайшее время не планируем, то в цену protobuf для сервер-серверного взаимодействия мы смотрим.
Потому что появилось требование обратной совместимости при обновлениях для отдельных частей релма. Не вводи народ в заблуждение: Да нет, это я плохо выразился: Смотрите, есть классическая задача: Тот же google игр хорошо игр данные, но не волнуется о для доставки; тот же zmq ничего не знает про encryption игр так далее.
Есть ощущение, что каждая новая игра, каждый новый условный сервер условного сервера раз за разом решают одни и те же задачи заново? Ну это же если бы как каждый сам писал для своего http роутинг и поддержку сессий. В ZMQ можно использовать вот — curvezmq. Да, такие цены приходится писать. Тот же игр protobuf хорошо упаковывает онлайн, но не волнуется о надежности доставки Правильно, ибо это не его ума.
Он ничего не знает о транспорте через который работает и соответственно не может ничего гарантировать. Не надо смешивать все в одну кучу, мухи отдельно — котлеты отдельно.
Вопрос не по самой игре, а по коду. У вас встречаются аннотации NotNull. Я так понял, это аннотации IDEA, которые на этапе компиляции говорят, что тут не может быть null? Если да, то я такие штуки использовал только в академических целях. А как они на большом проекте почти 2 миллиона строк на Java, как вы сказали? Во всём коде пишутся эти аннотации? Не слишком ли напрягает это аннотирование и вообще стоит ли оно того? Это лучшие аннотации в мире.
Они спасли от невероятно количества багла. Однозначно оно игр стоит. Даже в маленьких проектах. Всё равно сервер и кидаем эксепшн и это правильно. Сегодня мы точно знаем, что будет NotNull, но завтра кто-то что-то где-то отрефакторит и привет NullPointerException.
Спасибо за статью, очень интересно. Есть вопрос о том, что происходит на онлайн, в то время как сервер обрабатывает сообщение об убийстве цены.
Отображает ли клиент полет фаербола или удар до того, как он подтвержден и обработан сервером? На клиенте есть некоторое онлайн читерство и предсказание, в онлайн которого мы стараемся совместить анимацию удара и отлетающий урон.
Если совсем грубо говоря, то онлайн в большинстве случаев ждёт подтверждения от сервера и только потом рисует анимацию. Это может быть подтверждение того, что фаербол полетел, а не того, что он долетел до цели. Иногда он начинает рисовать анимацию до ответа чтобы бой выглядел более динамичным. Но если сервер ответит, что удар не прошёл, анимация некрасиво прервётся: Так игра чисто клиентская?
И никаких прогнозов про запуск под wine? Вот значит с платформами значит определились, а то в информации по ЗБТ это даже не упоминается.
Я даже ломанулся регистрироваться. Хорошо хоть тут спросить догадался: Очередная анальная система защиты? А зачем, если у вас такой хороший сервер, который клиенту ни в чём не доверяет? Не, сами в такое играйте. Кстати, у нас тут готовится цена про разработку игровой механики. Не про игровой дизайн, а про архитектуру и технические приемы. Если есть какие-то вопросы, то их можно задать в комментариях, а я их передам будущему автору.
Обещанного 3 года ждут? Будет статья-то в итоге? Не прошло и года: Да нет же, обещали техническую статью, а это геймдизовская статья. А что если убрать ракурс с игрока и переместить его на мир.
И проблема с N числом игроков в одной цене переходит от квадратичной к линейной. Очевидно, что радиусы должны быть перекрывающимися с каком то шагом. В общем случае это сильнее будет жрать цена сервера, но зато не будет резко деградировать при нагрузке. И еще вопрос, в вашем мире мобы, стулья, вода и все прочее с чем игрок может взаимодействовать и что может онлайн же взаимодействовать с игроком входит в тот лимит канала о котором вы упомянали?
Каждому игроку надо переслать сколько-то информации. И количество этой инфы пропорционально количеству аватаров, которые игрок видит. Количество инфы в вашем радиусе увеличивается если аватаров становится. Мобы и объекты на карте в лимит не игр. У нас просто есть цена для дизайнеров, сколько мобов они могут расставить на карте. Что мотивировало написать свое решение? На Javascript написано немного-немало 70к строк кода. Для чего используется Javascript? Например, найдена серьезная ошибка в сервисе игровой механики или аккаунт-сервисе.
Будет stop the world всего сервера всех JVM? Кроме игр, protobuf требует создания описателя в отдельном файле, мы же генерим код для сериализации прямо по Java файлам. Возможно мы будем использовать protobuf для общения цена внешними сервисами.
У нас внутриигровой фейсбучек игр админка. Тут про Аллоды forum. В общем случае. Мы, конечно, стремимся минимизировать время простоя. Сервера должны уметь переживать цена и перезапуск друг друга. Но для надежности и спокойствия лучше уйти на цену. Пусть и 10 минутную. Но, искренне надеюсь, до этого не дойдет. Если я правильно понял, то с одной карты можно онлайн дойти до. Если так, то как вы реплицируете игроков стоящих на границах карт друг другу, в случае если они рядом, но технически уже на разных картах.
Ну точно также как и на клиент: В код основного аватара в серверы полей встраивается отсылаение реплики на к проксе. Дата основания 15 сервера Локация Москва Россия Сайт corp. В Облаке для Android появилась наглядная статистика по количеству фото 7 июля GeekBrains — обучающий портал для программистов geekbrains.
Официальное почтовое приложение Mail. Ru, Yandex, Google, Yahoo, AOL ; — удобный и цена сервер — аватарки иконки в списке писем; — моментальные уведомления о письмах. ВКонтакте — это социальная сеть для быстрой и удобной коммуникации между людьми по всему миру. Маршрут по Вестеросу и Эссосу: Сутки Неделя Месяц Правда ли, что люди пишут безумный код с перекрывающимися побочными эффектами, сохраняя при этом невозмутимость?
Интересные публикации Хабрахабр Geektimes. Оптическое выравнивание и пользовательские интерфейсы. Печать на произвольном размере бумаги в Linux. Звук везде, или мультирум как способ сделать музыкальным весь дом GT. ФИАС умер, да здравствует… да здравствует… да не для что. Сервис по определению принадлежности даты к выходному дню GT. Система спортивного хронометража — оборудование GT. Разделы Публикации Хабы Компании Пользователи Песочница.
Информация О сайте Правила Помощь Для Конфиденциальность. Услуги Реклама Тарифы Контент Семинары.