Как стать автором
Обновить

Комментарии 36

Тем временем в самой игре лаг в секунду-другую - в порядке вещей.

Причём это "Баг" исключительно серверов mail.ru:
По началу всё игралось просто отлично. Но потом кто-то что-то жутко напортачил с сетевым кодом, ввели так называемое "Предсказание движений" (или типо того, уже забыл, как его обозвали) и сервера начали адово лагать: Телепорты, непроходящий урон, рассинхроны движений и т.д. Всё, как мы любим...
Тем временем, на европейских серверах, где этого не вводили всё игралось просто отлично. Даже несмотря на пинг 80-100 - игралось в разы лучше, чем на RU серверах с пингом 20-30.

И ситуация досихпор не изменилась, судя по обзорам и форумам.

Круто вы свои сервера "Затюнинговали", ничего не скажеш... Только из-за этого перестал играть. (Даже Имба-донат и обилие читеров не так сильно напрягали, как лаги самой игры)

досихпор - это профессия какая-то? или деталь механизма?

Осилил треть текста, остальное читать не могу из-за огромного количества сленга, необходимость в котором вообще отсутствует. Понятно что автору "так удобнее", но мы живём в цивилизованном мире, а не на улице трепимся. Нужно же хоть немного придерживаться культуры создания и оформления текста. Например вы вполне уместно ввели термин "дедик" и как бы противно он не звучал, но сделали вы это абсолютно правильно, а вот остальное...

Прочитал весь текст, кроме "дедика" не нашел никакой специальной терминологии вообще. Но этот "дедик" сам по себе находка - потому что постоянно говорить "сервер с авторитарной валидацией консенсуса клиентов" это ппц какой оверхед на количество слов )) А тут всего четыре буквы.

UPD: в тексте есть еще "гонки" в кавычках, но все кто занимаются канкаренси так и говорят - гонки (подразумевая рэйс кондишен), т.ч. не сказать, что это нечто сильно необычное, просто из узкой области

Метагейм и матчмейкинг не очень понятны людям, которые в игры не играют.

Всё же вопрос не в том играют в игры или нет, а в какие конкретно игры?

а смысл тогда читать статью про игру и сервера игры,если человек далёк от этого? ему просто тут делать нечего

Затем же, зачем научпоп читают. Интересно.

метагейм, Realm, Ejabberd, на проде, стенд, метагейм бэкенд, шарпист, Dedicated сервер, стейт, оверхед, матчмейкинг, деплоить - и т.д. уж простите, но всю статью читать не стал.

Попробуем найти в моей голове сопоставления (делаю предположения, но не уверен что это верно, даже если я правильно понял то не совсем понятно как это может работать в рамках статьи):

метагейм - мета-игра?

Realm - копия игры на сервере?

Ejabberd - ?

на проде - на рабочем сервере?

стенд - понятно что такое стенд, непонятно в контексте статьи

метагейм бэкенд - спина мета-игры?

шарпист - любитель фильмов о Ричарде Шарпе?

Dedicated сервер - ?

стейт - состояние?

оверхед - надголовье?

матчмейкинг - создание матча (раунда)?

деплоить - ?

Вопрос даже не в том можно ли понять написанное, а в том, что понять со 100% вероятностью это смогут только люди "из профессии", что несколько сужает рамки аудитории.

канкаренси так и говорят - гонки (подразумевая рэйс кондишен

ничего непонятно )

а в том, что понять со 100% вероятностью это смогут только люди "из профессии", что несколько сужает рамки аудитории.

Так и не нужно. Профессиональные статьи - для профессионалов. Я понял всё, мне было интересно. Хотя я в геймдеве проработал едва ли год.

ничего непонятно )

если ты не занимаешься конкаренси - и не должно быть понятно. Многопоточность - это одна из самых сложных тем вообще. Подробней можно посмотреть на википедии: https://ru.wikipedia.org/wiki/Состояние_гонки

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

Realm - реалм это реалм. Ну типа, "сервер игры". Изначально термин идёт из компьютерной безопасности (реалм как домен аутентификации), а называть сервера реалмами начали как минимум в WoW. Идея в том, что реалм - это в первую очередь набор логинов пользователей, которые могут логиниться на сервер

Ejabberd - это супер известный опенсорсный джаббер движок, написанный на эрланге. Может быть, САМЫЙ известный.

на проде - ВСЕ говорят "прод". На продакшен сервере. В госкомпаниях в России часто говорят "на продуктиве" - это самый российский перевод. Прод - это критически важный сервер, которым пользуются реальные пользователи. Противоположность стейджинга, теста и дева.

метагейм бэкенд - это бэкенд (сервер), который запускает на себя функции метагейма

шарпист - программист на C#

Dedicated сервер - дедик, выделенный сервер

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

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

матчмейкинг - да, создание матча. Это термин геймдева, никто не говорит "создание матча"

деплоить - разворачивать софт на серваке. Это термин девопса, почти никто не говорит "разворачивать софт" кроме самых упоротых

Так и не нужно. Профессиональные статьи - для профессионалов

я иногда читаю специализированную литературу и статьи (на очень разные темы), включая на английском и просто хохочу в три горла с этого глупого утверждения. Это раз и два - я не вижу нигде отсылки на то, что данная статья написана исключительно для "своих", это, кстати, тоже было бы частью правильного оформления статьи.

Так что нет, автор статьи писать не умеет, это статья, а не тудушка на файлопомойке.

И расшифровать написанное я могу и сам, вопрос именно в том, что читатель не должен этим заниматься.

Видимо:

**Метагейм** - информация о игроках вне игрового мира.

**Realm** - название сервиса выбора региона\локации.

**Ejabberd** - сервер обмена сообщениями.

**На проде** - на продакшене (production) - то есть в действующей среде, с которой и взаимодействуют реальные пользователи\игроки.

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

**Метагейм бэкенд** - сервисы отвечающую за обработку данных игрока. Но спина мета-игры звучит прикольней :)

**Шарпист** - Программист со знанием языка си-шарп (с#).

**Дедик** - Dedicated сервер - выделенный сервер.

**Стейт** - состояние. Верно)

**Оверхед** - излишек, например написать больше кода, без которого можно обойтись, который будет делать лишние проверки, а значит заставлять процессор больше работать, там где это скорей всего не нужно.

**Матчмэйкинг** - в данном случае, сервис, отвечающий за подбор игроков и запуск матча, одной из главных целей которого, собрать максимально сбалансированные команды игроков, из тех, что находятся в ожидании поиска игры, не заставив при этом их долго ждать.

**Деплоить** - развернуть, обычно новый сервис или новую версию сервиса.

остается неясной потребность в использовании таких слов. простой пример, на работе есть личности которые говорят так: "Ну-чо, Ирка, го чайку швыркнем?", хотя никто не мешает сказать "Ирина Васильевна, позвольте поинтересоваться? Не хотели бы Вы выпить чаю?"

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

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

НЛО прилетело и опубликовало эту надпись здесь

Ну знаете ли, не всем пермадез нравится.

Расскажи пожалуйста, если дедик заметил десинк на клиенте (н-р тупо баг или чит), что вы делаете? Отматываете "время" на клиентах до предыдущего чекпоинта истины или как-то ещё справляетесь? Если отматываете, это восстановление до снапшота, или выполнение операций в противоположном направлении? Короче, расскажи про методику восстановления корректного стейта)

Мне кажется, что сервер периодически присылает полный state игры, благо там вряд ли много данных. Плюс возможно небольшие пакеты с отдельно только с последними изменениями или какими-то сообщениями (типа воспроизвести звук). Клиенты, используя тот же код, что и на сервере, обрабатывают игровой мир, и обновляют свой state данными с сервера.

В случае с читером он не сможет вмешаться непосредственно в игровой процесс (так как им рулит все же сервер), но все равно сможет делать штуки типа wall-hack, в зависимости от приходящих с сервера данных.

По крайней мере, так работают некоторые open-source шутеры.

Еще вопрос про "дедики", учитывая что они в кавычках и ты говоришь про "отключенную графику". Они были запланированы изначально при разработке сетевой архитектуры, или это появилось посредине разработки как некий внезапный хак о том, что можно отключить графен и теперь оно запускается на сервере?

Это стандартный паттерн разработки многопользовательских игр - dedicated server. Тот же Unreal Engine и CryEngine предлагает такой подход из коробки. В коде естественно нужно это поддерживать.

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

Попробую сказать то же самое, но другими словами. Можно написать сервер, который будет симулировать состояние. Который будет, что называется, изначально cloud native, разрабатывался с нуля как сервер.

А можно взять клиентский код игры, обрезать ей графику, обмазать серверным кодом и запустить в докере. И тоже использовать её как источник истины. Кровавые костыли, короче.

Интересно, по какому пути пошли авторы. По формулировке это может оказаться второй путь, и это будет интересным прецедентом )

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

Всё так. Но история знает исключения! Например, For Honor делался для бессервеной peer-to-peer боевки ))

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

Во-первых, вам нужно будет каждую фичу реализовывать 2 раза, 1 на сервере, другой на клиенте, что естественно просто в 2 раза дороже.

Во-вторых, очень велика вероятность того что у вас механика на сервере будет обсчитываться немного иначе, что постоянно будет приводить к различным проблема на клиенте.

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

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

Ну и да, естественно движок игры, будь то cry engine или какой то другой, обычно предоставляет необходимые механизмы для такой реализации. Что бы один и тот же код можно было и на клиенте и на сервере выполнять.

Я это понимаю как - не удалось сделать что бы один и тот же дедик использовался в разных сессиях по очереди. То есть одну сессию сыграли, а после этого приходится убивать и запускать его заново, вместо того что бы прям в нем загрузить новую карту, очистить состояние и начать играть следующую сессию.

Никто не будет ждать 10-15 минут, пока матч соберется.

Как игрок в Overwatch (с релиза), я бы хотел для себя иметь какую-нибудь переключалку вида "дикий матчмейкинг"

Потому что иногда твоя цель - это карабкаться вверх по ладдеру. Тогда если тебя матчмейкнули с чуваками на голову выше - это горе, шансов выиграть ноль, винстрик сбит (винстрик позволяет быстрее карабкаться по ладдеру). По сути, неверный матч - это минимум час потерянного времени.

А иногда, наоборот, цель - это учиться, и тогда игра против игроков классом выше - это важно и нужно, и каждая катка куда тебя закинули с зелеными нубами - бесит до дрожи. Потерянные десять минут. Разве что можно поставить себе челленж - играть супер агрессивно, чтобы раскатать не за 10 минут, а за 7. Но в любом случае, навык унижения нубов никак не поможет в заползании по ладдеру.

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

Поэтому матчмейкинг это наверно основной бизнеспроцесс в сессионных играх.

Причем в любых, даже в тех, где единственный донат — красивые шкурки на персах. Если матчмейкинг будет идеален, игрок слишком быстро упрется в потолок своего скилла, а далеко не каждый (точнее — лишь сравнительно небольшой процент) станет заморачиваться с гайдами и тренировками. Когда человек почувствует, что добрался до личного потолка и в следующий дивизион ему никак не перейти без серьезных трудозатрат, он просто уйдет в другой проект, и как раз дизбалансный матчмейкинг позволяет удержать игрока как можно дольше. А там, глядишь, он и занесет денежку ради облика для своего любимого героя.

Плюс перекладывание ответственности. Сложнее всего признавать собственные ошибки, а если в команде есть нубы, а у противника — сплошь нагибаторы, то всегда есть, кого винить в поражении. По этой же причине, к слову, в играх с соревновательным компонентом с ливерами, афкшерами и гриферами как бы борются, но вполсилы: лишний онлайн не помешает, а сорванные матчи еще больше отдаляют добросовестных игроков от максимального для их уровня игры дивизиона, что парадоксально способствует их удержанию в игре.

Пробовали переиспользовать на много сессий, но столкнулись с проблемами, что игровой мир после завершения сессии не до конца очищает свой стейт и частично сохраняет его между сессиями. А это нам не нужно.

А поправить этот баг не? Если на сервере используется тот же код, что и на клиенте, то не может ли это вызвать проблемы у обычных игроков? Например, те же лаги, когда у клиента во время игры предсказываются одни данные, но с сервера прилетают другие.

Скорее всего, там очень stateful код. Что откуда берется - неясно, потому что всё лежит в глобальной по отношению к серверу помойке. Рефакторить придется год, а им надо бабки сейчас зарабатывать - через год может уже ничего не быть :)

Это скорее системное решение для защиты от таких проблем. Все равно что разные сервисы в разных контейнерах запускать, что бы добиться их изоляции друг от друга, а не просто все вместе на одной голой системе.

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

На самом деле, мне было интересно узнать подробности устройства игры, даже не смотря на то, что я не програмист)

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

На что ругается обычный игрок? На фризы, баги и вылеты. Если они есть, он думает что разработчик плохой. Но на самой деле это просто игра такая, в ней что не тронь - что то, да сломается. Всё работает на костылях и постоянно ведётся работа по оптимизации процесса и улучшению кода. Пусть это и не видно обычному игроку, но приятного знать, что разработчики этим заняты)

Хочу пожелать сил и побольше удачи, чтобы ломалось по меньше всяких систем в игре)

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

Я сам не играю в эту игру, но периодически вижу на телевизоре, как играет сын. Особенно привлекают внимание его эмоциональные всплески. Хэдшоты. Как игроки их делают? На большом расстоянии два выстрела с интервалом в 1-2 секунды. Два хэдшота. Или бежит, упал, сразу выстрел и хэдшот. Практически в каждом бою есть такой терминатор. Я не поверю, что это возможно с джойстиком консоли. На компьютере? Или компьютере плюс что?

Если это не легально, но так популярно, может, стоит сделать некий официальный Api для игроков-разработчиков? Кто-то заработает, а кто-то даже в программисты пойдет.

два выстрела с интервалом в 1-2 секунды
Я не поверю, что это возможно с джойстиком консоли.

Играешь год по 8 часов в день, и можешь вытворять очень мощные фокусы

Например, есть Dark Souls - одна из самых "сложных" игр для казуалов (на самом деле, сложность заключается в чудовищной нудности и том, что игра совершенно не прощает ошибок)

Вот тебе прохождение Dark Souls на танцевальном коврике: https://www.youtube.com/watch?v=rZXUXqQnI6c

Под Линукс запустили? Или PC предполагает только windows?

Зарегистрируйтесь на Хабре , чтобы оставить комментарий