Есть ли программы записи работы java сервера? Для последующего воспроизведения как записи в клиенте

BladeRunner

Свой человек
Меценат
Сообщения
1 316
Розыгрыши
0
Репутация
-269
Реакции
491
Баллы
525
Хроники
  1. Interlude
Исходники
Присутствуют
Сборка
любая с исходами
Подскажите, есть ли решения, как логировать полностью всю работу сервера? чтобы потом по имеющимся логам можно было запустить сервер на воспроизведение их, и получить как бы полную видео-запись со всеми данными того, что происходило на сервере. Мне это видится как дополнительный сервис, который для админского персонажа создает проигрывание сервера по записи , при этом можно менять скорость воспроизведения, перематывать, фризить. такая своеобразная "Матрица" получается)
И если нет - кому интересно заморочиться созданием такого на платной основе или как проект на энтузиазме? ))
 
Что конкретнее нужно в такой вот "видео-записи" ? Сервер это достаточно большая штука. Много чего может происходить из того что просто не видно вооруженным глазом. Это к слову о том что-бы более менее сфокуссировать внимание на что нужно воспроизводить для записи.

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

В кратце скажу что да, можно сделать. Но проблема не в том что можно, а как это будет нужно.
 
Подскажите, есть ли решения, как логировать полностью всю работу сервера? чтобы потом по имеющимся логам можно было запустить сервер на воспроизведение их, и получить как бы полную видео-запись со всеми данными того, что происходило на сервере. Мне это видится как дополнительный сервис, который для админского персонажа создает проигрывание сервера по записи , при этом можно менять скорость воспроизведения, перематывать, фризить. такая своеобразная "Матрица" получается)
И если нет - кому интересно заморочиться созданием такого на платной основе или как проект на энтузиазме? ))
В кругленькую сумму это выльется, а энтузиастов маловато в наше время
 
Что конкретнее нужно в такой вот "видео-записи" ? Сервер это достаточно большая штука. Много чего может происходить из того что просто не видно вооруженным глазом. Это к слову о том что-бы более менее сфокуссировать внимание на что нужно воспроизводить для записи.

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

В кратце скажу что да, можно сделать. Но проблема не в том что можно, а как это будет нужно.

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


Реплеи стандартные не устраивают?

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

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

А вот после этого нужно еще подумать каким образом можно запись проиграть. Да так чтобы никто ме смог влиять на запись (например проигрываем моба, могут ли другие игроки каким-то образом убить такого вот моба?). Ведь запись это и локация, и то что видно в клиенте, да и различные паузы. Работы будет много что-бы все работало. И больше будет если нужно выписывать статистики ударов, криты ну и другие эффекты.
 
Не все логируется как надо. У L2J например (ну и у вариантов тоже) есть ивенты к которым обычно прикрепляются квесты. Так вот, можно по таким вот ивентам и построить систему записи. Так вот нужно добавить таких ивентов в различные части кода чтобы можно было их собирать. Ну типа вот ивент и вот дата по времени, и сохраняем в базу данных.

А вот после этого нужно еще подумать каким образом можно запись проиграть. Да так чтобы никто ме смог влиять на запись (например проигрываем моба, могут ли другие игроки каким-то образом убить такого вот моба?). Ведь запись это и локация, и то что видно в клиенте, да и различные паузы. Работы будет много что-бы все работало. И больше будет если нужно выписывать статистики ударов, криты ну и другие эффекты.

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

ЗЫ: какая наркомания и дереал будет у неосновных спектаторов, когда главный админ будет вперед- назад проматывать) как в фильмах, где главный герой перестает существовать в реальности, и она произвольно вокруг него существует, при этом со скачками во времени)) жоская наркомания )))

ЗЗЫЫЫ: кажется я ебейшую штуку придумал) это по сути эффект бога , только в ЛА2)
 
Последнее редактирование:
Разворачиваешь длп систему и принужденно ставишь агенты игрокам и они для тебя стримят свою игру всегда, that`s all
 
Разворачиваешь длп систему и принужденно ставишь агенты игрокам и они для тебя стримят свою игру всегда, that`s all

это не то. и гигатонны мусорного трафика. тем более под задачи, которые изначально указал - пошаговый анализ хода боя в Пвп или Пве
 
это не то. и гигатонны мусорного трафика. тем более под задачи, которые изначально указал - пошаговый анализ хода боя в Пвп или Пве
Thread.dumpStack();
после каждого метода )0)))0)
 
выходит 2 вопроса основных:
1. логирование работы лайв-сервера с объединением в единый лог всей инфы
2. допиливание механики вопроизведения в обычное ядро сервера этого лога, чтобы он ретранслировал его обратно в пакетку для клинета. Или сразу логировать пакетку? (хз, врядли). Далее сервер одновременно транслирует подключенным по доступу клиентам игры пакеты записи по локации их спектатора, и при этом позволяет существовать спектатору с движением в этом инстансе(или как его назвать), без взаимодествия с миром.

ЗЫ: какая наркомания и дереал будет у неосновных спектаторов, когда главный админ будет вперед- назад проматывать) как в фильмах, где главный герой перестает существовать в реальности, и она произвольно вокруг него существует, при этом со скачками во времени)) жоская наркомания )))

ЗЗЫЫЫ: кажется я ебейшую штуку придумал) это по сути эффект бога , только в ЛА2)
Первый пункт можно сделать очень просто и сердито. Записываем ивент в БД с датой.

A вот второй уже будет сложнее. Тут нужно заменить ИИ мобов и игрока (да, игрок тоже имеет ИИ, только он заточен на исполнения определенных взаимодействий) на исполнение либо ивентов, либо переработанных данных от ивентов, то есть очен прямолинейно и без обычной логики формул для урона/ХП и так далее.
 
Первый пункт можно сделать очень просто и сердито. Записываем ивент в БД с датой.

A вот второй уже будет сложнее. Тут нужно заменить ИИ мобов и игрока (да, игрок тоже имеет ИИ, только он заточен на исполнения определенных взаимодействий) на исполнение либо ивентов, либо переработанных данных от ивентов, то есть очен прямолинейно и без обычной логики формул для урона/ХП и так далее.

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

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

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

2. ИИ относится к коду сервера. Можно называть это все не ИИ а чем-то другим, например поведением персонажа. Так вот, нормальное поведение нам ненадо (например аггро или же что будет когда моб начнет убегать...) Все что связанно с нормальным поведением либо игрока или мобa теперь нужно просто отключить, только пакеты генерить. Просто по логу не получиться. Больше половины сервера завязанно либо на поведении игрока, либо мобов.
 
1. Все записывается в базу данных. Не действия, а именно ивенты от того что произошло на сервере. Например персонаж пришел на такую-то позицию и кастанул баф на себя. Это два ивента: куда персонаж пришел, где и когда, ну и какой баф и когда. Сохранение таких данных и организование таких ивентов в лог - давно решенная задача, в принципе можно организовать на любой базе данных (SQL или нет, можно даже это все засунуть в Кафку или NATS если делать нечего).

2. ИИ относится к коду сервера. Можно называть это все не ИИ а чем-то другим, например поведением персонажа. Так вот, нормальное поведение нам ненадо (например аггро или же что будет когда моб начнет убегать...) Все что связанно с нормальным поведением либо игрока или мобa теперь нужно просто отключить, только пакеты генерить. Просто по логу не получиться. Больше половины сервера завязанно либо на поведении игрока, либо мобов.

На пальцах мне пока сложно понять. Надо садиться и разбираться в структуре ядра, и как из нее вытащить все нужное. Я правильно понял, что ивентом будет не каждая точка, по которой бежал игрок, а конечная? Хотелось бы сохранять всю траекторию
Как именно завязаны на поведение игрока или мобов? Допустим есть траектория игрока, есть положения мобов. Игрок подбежал и начал бить моба, оба начали юзать скилы и менять полодение. Если есть иефа по всем действиям и координатам движения, то поидее из лога мы можем воссоздать сцену происходящего
 
На пальцах мне пока сложно понять. Надо садиться и разбираться в структуре ядра, и как из нее вытащить все нужное. Я правильно понял, что ивентом будет не каждая точка, по которой бежал игрок, а конечная? Хотелось бы сохранять всю траекторию
Как именно завязаны на поведение игрока или мобов? Допустим есть траектория игрока, есть положения мобов. Игрок подбежал и начал бить моба, оба начали юзать скилы и менять полодение. Если есть иефа по всем действиям и координатам движения, то поидее из лога мы можем воссоздать сцену происходящего
Ты вообще имеешь представление сколько у тебя лога будет в минуту?))) даже при онлайне в 100 колек. если прямо все записывать. Один юз сосок тебе засрет диск по самые гланды за пару часов)
 
На пальцах мне пока сложно понять. Надо садиться и разбираться в структуре ядра, и как из нее вытащить все нужное. Я правильно понял, что ивентом будет не каждая точка, по которой бежал игрок, а конечная? Хотелось бы сохранять всю траекторию
Как именно завязаны на поведение игрока или мобов? Допустим есть траектория игрока, есть положения мобов. Игрок подбежал и начал бить моба, оба начали юзать скилы и менять полодение. Если есть иефа по всем действиям и координатам движения, то поидее из лога мы можем воссоздать сцену происходящего
На самом деле нам не нужен ивент o том что-бы персонаж куда-то пришел. Просто когда персонаж собирается идти, тогда будет ивент который мы сможем записать. То есть откуда и куда. Если знаем значения скорости, то нам ничего больше не надо (даже на сервере прорабатывать, так как серверный пакет заставит персонажа двигаться, есть нюанс с геодатой, но не критично) прорабатывать. Просто считай что если надо что-то сделать, будет ивент. Если есть изменения по HP/MP/CP, тоже будет ивент. Вот и все.

Ты вообще имеешь представление сколько у тебя лога будет в минуту?))) даже при онлайне в 100 колек. если прямо все записывать. Один юз сосок тебе засрет диск по самые гланды за пару часов)
Обычному сервере на Яве будет проблематично, особенно если не учли как будут сохранять данные или же сколько потоков будут получать эти ивенты. GC будет зашкаливать. Хотя если использовать batch update, ну и object pool, тогда и будет все хорошо, даже если будут ивенты генериться десятками тысяч. Но увы, это все для отдельного обсуждения. Просто надо понимать что если нужнo решать такие нагрузки, решения будут тоже достаточно эзотерическими.
 
все что ты видишь в клиенте - это результат отправки пакетов от сервера в клиент. По сути так работает реплей - т.к он тупо пишет сокращенный лог пакетов, дропая технические пакеты, но это не то, что ты хочешь.

По сути, ты хочешь хранить дамп хипа и всех потоков за каждый момент времени на протяжении всей жизни сервера, при этом еще в таком виде, чтобы по этому дампу потом можно было воспроизвести игру в реалтайи, да еще и с возможностью перемотки и ускорения/замедления, поэтому тебе придется хранить инфу о каждом объекте и всех его дочерних объектах.
Чтобы воспроизвести состояние каждого объекта на сервере, тебе нужно сохранить состояние каждого серверного объекта в каждый момент времени. Если кратко - в контексте л2 и ява это не реализуемо на современном уровне технологий. В теории, это возможно, но это потребует колоссальных трудозатрат, вычислительных ресурсов и объемов для хранения, а также полное переписывание всего существующего кода эмулятора и наверное еще и солидного куска JVM. Даже если представить, что ты все это переписал, то это сотни гигабайт данных в час.
 
В простом варианте можно сохранять все пакеты в базу данных как в яндекс метрики, а дальше простая аналитика
 
Ты вообще имеешь представление сколько у тебя лога будет в минуту?))) даже при онлайне в 100 колек. если прямо все записывать. Один юз сосок тебе засрет диск по самые гланды за пару часов)

А сколько? Помнится на заре ла2 на мелке, и даже на еврооффе играли по тарифному инету. И вместе с серфингом в месяц хватало часто 1 гига. Есть инфа, сколько трафика при каком реальном онлайне без трейдеров жрет сервер в месяц?

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

По сути, ты хочешь хранить дамп хипа и всех потоков за каждый момент времени на протяжении всей жизни сервера, при этом еще в таком виде, чтобы по этому дампу потом можно было воспроизвести игру в реалтайи, да еще и с возможностью перемотки и ускорения/замедления, поэтому тебе придется хранить инфу о каждом объекте и всех его дочерних объектах.
Чтобы воспроизвести состояние каждого объекта на сервере, тебе нужно сохранить состояние каждого серверного объекта в каждый момент времени. Если кратко - в контексте л2 и ява это не реализуемо на современном уровне технологий. В теории, это возможно, но это потребует колоссальных трудозатрат, вычислительных ресурсов и объемов для хранения, а также полное переписывание всего существующего кода эмулятора и наверное еще и солидного куска JVM. Даже если представить, что ты все это переписал, то это сотни гигабайт данных в час.

С телефона ща неудобно, позже раскрою идею. Новичкам везет потому, что они не знают, что чтото считается невозможным или сложным. Я часто слышу это, а потом делаю)
Можешь подскащать средний месячный трафик сервера рыл на 1000 реальных без трейдеров? И может средний обьем трафика на одного?

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

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