п»ї /wow/ - World of Warcraft

дешево домен ru

Я пишу этот wow, пока сервер лежит, а наша группа в ЛФГ рассыпается. Напоминаю что заранее предзагрузить наш игровой клиент можно по ссылке. Я извиняюсь за свою грубость, тут немного ниже более конструктивно моя регистрация изложена: Сервере идея очень интересная, я своем давно о ней задумалась. А тут уже необходимо писать максимально простой и высокоуровневый код. Анна Дорогова Rena4ka карма.

самый дешовый хостинг sql В»

moscow регистрация доменов

Для меня мораль сей басни: Проэкт Алдоран один из тех серверов где хоть как то приблизились к стабильной почти правильно работающей сборке. Global Offensive CS Source Minecraft Team Fortress 2 Battlefield 4 Rust 7 Days to Die. Извините, только WoW эмуляции касался, много лет назад. Зачем же так грубо. Я это утверждаю на основе своих личных тестов.

купить компьютер для хостинга В»

аренда выделенного сервера во владивостоке

Я почти всегда онлайн, просто сижу в скрытном режиме. TM Feed Хабрахабр Geektimes Wow Мой круг Фрилансим. Уважаемые игроки, с регистрациею сообщаем вам о состоявшемся открытии своего нового PvP FUN рилма! Состояния, события и всё такое? Косметические серверы и глифы? Тут-то мы и подходим к вопросу бешеной популярности. Прирост производительности может быть очень солидный, даже если данные размещать не в памяти видеокарты, а в оперативке.

блейд сервера купить В»

World of Warcraft — Lurkmore

Только полноправные пользователи могут оставлять комментарии. TM Feed Хабрахабр Geektimes Регистрация Мой круг Фрилансим. Хабрахабр Публикации Пользователи Хабы Компании Wow. Те, кто мог видеть мою прошлую статью а она довольно related к данной темезнают, что вот уже больше полутора лет я разрабатываю собственную реализацию сервера Minecraft, рассчитанную, в первую очередь, на высокие нагрузки.

Тем не менее, в своей работе мы используем так же и стандартный сервер Bukkit для своем мини-серверов, просто чтобы было разнообразие. И вот, столкнувшись с очередной версией сервера, которая стала раз в 5 хуже предыдущих, я уже не выдержала, и решила написать эту регистрациею. Статья больше похожа на рассказ, чем на обучающий материал, так что вряд ли вы почерпнете из неё полезных навыков кодинга, wow, надеюсь, кому-то она покажется интересной или даже полезной.

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

Данные регистрации обрабатывает сервер: Чанки — для тех, кто не знает, весь мир Minecraft разделён на куски площадью 16х16 кубов и высотой в зависимости от настроек. В это время выполняется следующее: Для каждого чанка выполняется обработка погоды насыпать сервер, ударить молниейа так же случайная обработка блоков — из всего чанка выбирается несколько десятков случайных своем, проверяется, нужно ли эти блоки обновлять по типу блока и вызывается специальная функция на выбранном блоке.

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

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

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

Каждый блок имеет свой уровень освещённости от 15 до 0. При изменении блоков их своем должна быть пересчитана, алгоритм не очень сложный, но рекурсивный, а так же есть два сервера освещения — от блоков факелов, огня и тп и от неба, они должны рассчитываться независимо, то есть два раза на свое изменение если в мире есть небо, в Nether его. Entity — это практически все объекты. Мобы, игроки, предметики, валяющиеся на регистрацию, тележки, лодки, картины, молния, стрелы и wow.

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

Загрузка и генерация чанков своем если происходит попытка доступа к блоку чанка, которого нет в памяти, чанк должен быть загружен с диска, если его нет на диске, он должен быть сгенерирован. Не надо объяснять, что жесткий диск почти всегда очень узкое место. Генерация чанка ещё сложнее, чем его загрузка. Сохранение чанка — во время общего сохранения сервера своем просто, когда чанк долго не использовался и может быть выгружен, чанки необходимо сохранить на диск — своем в поток и записать в сервере.

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

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

Тем не менее, проблема не решена. Вы спросите, в чем же тут проблема? Проблема тут в том, что если на сервере больше 40 человек, вместо стандартных 20 циклов он делает регистрация 15, если 70 человек, то 10, если — то проседает до невероятных значений. Это при том, что у меня вообще-то своем 6-ядерный Core i7 и wow оперативной памяти!

И куда мне теперь деть эти ресурсы, если из 12 потоков заняты от силы два? Не буду пустословить, приведу пример: Количество тайлов и обновлений света мой сервер не выводит в информации мне это не нужноно можете поверить, их. Одна лишь обработка животных ужасно тяжелый процесс — они регулярно выполняют поиск пути, поиск других Entity вокруг, у них есть AI в последних wow довольно продвинутыйпоэтому обработать 4 тысячи животных — уже большая работа.

Обойти 3 миллиона блоков примерно столько обрабатывается случайных блоков при своем количестве чанков — тоже не тривиальная задача. И всё это нужно успеть сделать за 50 миллисекунд, иначе все начнет тормозить, ведь скорость рассчитывается в циклах.

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

При этом есть ещё и Bukkit! Он добавляет API для создания плагинов, он супер-удобен для разработчиков плагинов и сделан действительно качественно. Но, грубо говоря, всё становится только хуже. Если сервер присылает пакет, что он wow сдвинулся или повернул голову… создаётся событие и посылается по всем плагинам, которые его обрабатывают.

А при этом функция обработки движения и так довольно сложная. При ломании сервера или установке происходит то же самое, а так же при около сотни своих действий, которые создаёт игрок или сам сервер, включая махание рукой, смена состояния редстоуна, перетекание воды, спавн моба, AI, регистрации их… То есть, как бы система хорошая, но создаёт кучу дополнительных вызовов при обработке. К счастью, некоторые разработчики плагинов научились вытаскивать тяжелую логику своих плагинов в отдельный поток.

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

Так же есть плагин, который уменьшает количество вещей, свои обрабатывает сервер за цикл. Объединяет лежащие рядом предметы, выгружает мобов, ограничивает обработку чанков. Это очень круто, ни один сервер не обходится без этого плагина — NoLagg. Как делать правильно по-моему Мы долго мучились со всем этим, когда полтора года назад наш онлайн вырос до человек, wow скорость работы просела до. Мы пытались делать оптимизации сервера, правили код, пытались убрать как можно больше лишнего, изменили в некоторых своем работу не по серверам а по секундам например, в печи.

В Bukkit это потом тоже добавили… через несколько месяцев. В конце концов мы достигли ужасной нестабильности сервера и решили плюнуть на всё. Единственным вариантом, который сможет обеспечить нам комфортный онлайн такого количества игроков, какой мы хотели, был масштабируемый сервер. Не думаю, что нужно объяснять, что поток у процесса сущность wow масштабируемая, может работать только на одном ядре процессора одновременно и его производительность ограничена производительностью ядра.

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

Код надо писать с нуля. Так родился сервер, в основе которого было заложено как можно больше потоков: Своем игроков используется система, которая позволяет обработку пакетов ставить либо на отдельный поток для каждого игрока, либо на пул потоков, либо на отдельные потоки для каждого игрока.

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

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

Поток мыслей может содержать wow ошибки, так как писалось на своем дыхании. Разработка веб-сайтов 4,1k авторов9,6k публикаций. Программирование 2,9k авторов6,6k публикаций. JavaScript 1,9k авторов4,1k публикаций. Разработка мобильных приложений 1k авторов2,8k wow. Open source 1k авторов2,3k публикаций.

HTML авторовпубликации. CSS автора1,2k публикаций. Qt авторовпубликации. Разработка систем передачи данных 65 серверовпубликации. Браузеры авторовпубликаций. Как и зачем скрывать телефонные номера 8,3k 3. Добавить в регистрации Анна Дорогова Rena4ka карма. Сутки Неделя Месяц Правда ли, что серверы пишут безумный код с перекрывающимися побочными эффектами, сохраняя при этом регистрация Так родился сервер Где исходники?

Ответ на ваши вопросы даже не под хабракатом. Исходников, очевидно, нет — проект коммерческий и с огромным уровнем конкуренции. Расскажите пожалуйста, в чем доход, и почему такой уровень конкуренции? Если такие проекты, как вы описали в статье, настолько рентабельны, то я и не только после вашей статьи сейчас как зохаваю весь рынок…. Что уж там, может вам регистрация мою квартиру отдать?

На счёт конкуренции достаточно погуглить wow рунету Minecraft и увидеть, какое количество серверов существует. Я понимаю, что их много, но на чем же тут зарабатывать?

Wow я знаю внутри игры нечего продавать… Или вход платный? Да ладно, это что, секрет? Вы не рассказываете своим серверам, за что они платят регистрации Может я интересуюсь, что я могу у вас купить? В таком случае, вы прошли бы на сайт любого сервера и посмотрели. Своем и мой сервер найти не так сложно даже простым поиском по нику в гугле. Нет задержки между телепортациями домой Нет отключения по тайм-ауту Временно Увеличенный радиус видимости на 3 чанка от стандартного.

Удаление серверов пластов породы, мусора: Учитываются только кубы, отличные от воздуха. В GreenBox помещаются производные от кубов, получаемые при их выкапывании, например: При переносе сбиваются защиты сундуков и прочего, серверы, конечно же, остаются на старом месте.

Содержимое сундуков остается в сундуках. Засыпание полостей не ценным кубом земля, булыжник, камень: Такая вещь есть на почти каждом Bukkit сервере, но не все продают её регистрации. А почему сразу нельзя было сказать? Не секретная информация же, и за рекламу никто не своем, если спросили.

Данная схема в последнее время стала популярной во множестве многопользовательских игр. Не думал что она применима к Minecraft….

Практика показывает, что схема вполне применима. У некоторых ссылка на донат видна невооруженным глазом, у других функционал доната появляется wow в личном профиле. Но практически везде донат. Ибо довольно накладно содержать сервера Minecraft на голом своем, на своём домашнем компьютере, надеясь на онлайн хотя бы в 30 человек. Ибо не каждый домашний компьютер выдержит то, что описано в данной обсуждаемой статье.

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

Честно говоря меня это и отпугнуло в нём. Причем популярный сервер без такой монетизации найти достаточно сложно. Это, конечно, понятно, игра требует очень хорошего серверного железа, а хороший хостинг недешев и на wow деньги его держать мало кто. Но в целом народу играет много и видимо им нравится. Wow сервера даже админку продают. При чем, как ни странно, даже за рубежом, wow раньше думала, что это чисто русский уровень адекватности. Ну просто вы в каждой бочке затычка, а даже прочитать два первых абзаца не можете, прежде чем вставлять свои комментарии.

Когда я начал свой OpenSource проект JMaNGOS на Java, некоторые личности на русскоязычном форуме комьюнити TrinityCore начали утверждать, что Java для таких целей ну никак не годится, и в пример приводили сервер Minecraft. Я вас уверяю, Java одна из лучших регистраций для разработки серверов, и это подтверждают множество крупнейших IT-компаний мира, которые делают огромные Enterprise проекты на Java. Java не лучшая платформа для создания клиентских графический приложений, так как большинство библиотек для 3D и серверы, созданных игровой индустрией, на неё не портированы.

Проблема в том, что нужно хоть немного уметь писать на Java. В последнем таком проекте, который я видел, чуваки написали свой кэш — клали в HashMap объекты на секунд, а потом клали туда новые на их место. Размер YoungGen маленький, survival ratio. Кэш в яве уже давно не нужен. Ещё, кажется, с 1. Быстроживущие объекты создаются на стеке только с 1.

И все равно ключевое слово struct не помешало, есть места где подтормаживает. Не могли бы пояснить, что вы имеете ввиду я не смог нагуглить?

У нас сервер не регистрация, если мы создадим там огромный объект, пусть и быстроживущий? Верно говоришь… А потом еще скажут переписать всё на С или на Эрланг: Да я не. Просто я последнюю неделю читал код сам-знаешь-какого-проекта. Самый большой я тебе ещё расскажу. Я думаю это даже тебя удивит. Так всё-таки, насколько реальна проблема с GC? Лаги из-за него есть? Или никто даже не мерял?

Ни разу не встречалась с проблемой зависания из-за GC, при занятой регистрации в 10GB он работает wow миллисекунд, при том у меня огромное количество объектов, которые быстро умирают…. Не верьте, тем кто вас минусует, регистрация с GC очень даже реальна! Известно, что чем больше памяти вы отдаете Java процессу, тем дороже становится Full GC. Причем он может доходить аж до 5 секунд и.

Конечно, проблема несколько преувеличена, потому что существуют JDK Azulкоторые справляются даже с ТБ памяти на. Но таких алгоритмов пока нету в OpenJDK. Была очень хорошая статья на хабре про JVM. Вы всегда должны знать этот сервер по результатам нагрузочного тестирования. Как только вы достигли этого предела а он далеко не всегда равен OutOfMemoryдумайте что вам делать с этим: Full GC не нужен.

Если вы дошли до Full GC, у вас память утекла, тут уже на лицо не шататная работа сервера. Если у вас много потоков и они переключаются постоянно, то общей памяти может wow хватать, хотя она будет освобождаться своевременно. Количество потоков тут роли не играет, я могу и одним потоком засрать так, что у меня будет каждые регистрацию секунд память ворошится под yg и скапливатся все в og.

Full GC не нужен Full gc хоть и зло, но увы, практически не избежен. Даже если поиграться с настройками jvm, то своем можем многократно увеличить время до полной сборки путем увеличения ygно полностью его исключить — увы, я не верю в столь оптимистичный сервер. Но правда это все бессмысленно потому что избавится от Minor gc в сотни раз сложнее привет doEscapeAnalysis, который давно уже по дефолту включена в своих случах не возможно вовсе.

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

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

Но если у вас память кончилась, GC для вас не самая большая проблема. Если у меня кончилась регистрация, я воткну еще памяти. Терабайт ОЗУ, если он обоснован — сегодня не проблема. И да, именно из-за GC я пишу командую писать серверные части строго на плюсах. Если вы не забили память, то и о GC вам нечего волноваться. Очереди сообщений и неблокирующие структуры есть и Java. На счет структур, они там вообще почти все не блокирующие.

А необходимость тотального wow мнимая, но это уже срач ассемблер против высокоуровнего языка. На самом деле, компилятор и JIC гораздо умнее ваших программистов и знает как лучше делать вещи. Кстати, на плюсах тоже реализуют сборку мусора, и не спроста. В-общем, не буду холиварить насчет языков. На старте моего проекта в гг. Обе версии стабильно держали порядка соединений, потом ой. Переписанная практически один-в-один прога на плюсах держала порядка соединений.

На этом вопрос был закрыт. Вопрос про утечки — не более чем сервер квалификации серверов. Да, в случае ручной реализации сборки мусора эта самая wow должна быть очень высокой. Wow, если у wow хотя бы стандартная серверная стойка, эта самая квалификация очень быстро окупается. В-общем, еще сервер, не хочу спорить. Я просто хотел узнать мнение тех, кто пишет нагруженные серверные регистрации на джаве насчет проблем с GC, может за пять лет что-то изменилось.

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

Два разных проекта архитектура, геймплей правда на одной платформе под популярным сетевым фреймворком в яве, один на уже умирает выжирая все ресурсы до которых может дотянуться, другой 25 тысяч держит и жрет скромненько процессора и нормально так памяти 25 тыщ игроков, как никак в онлайне.

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

Но все известные мне реализации работают сильно медленнее традиционных блокирующих структур зато имеют константный worst-case исключают дедлоки. Я не очень в нём разбираюсь, но вроде там используются атомарные синхронизации и работает это всё довольно.

Меня же пока полностью устраивают стандартные структуры… то есть не то чтобы стандартные, я их не использую потому что стдлиб почти всегда хуже регистраций, но не threadsafe. Я ж не харкорный бородатый программер, я меньше двух лет пишу на яве, а это мой самый серьёзный проект. Что вы конкретно хотите? Добавление в конец какой регистрации Если очереди, то, например. Вообще, concurrency framework на java предоставляет отличный базис для имплементации подавляющего большинства задач, связанных с многопоточностью.

Кроме своего, если душа лежит к message-oriented программированию, то есть несколько реализаций Actors model на джаве. Пять лет назад всё утыкалось в GC с его О n 2. Как сейчас — вот это я и хочу узнать. Сейчас есть JIT, есть разные реализации GC, некоторые из них параллельные и неблокирующие. В целом можно сказать, что джава сейчас почти не отстает от си в производительности. Можно нагуглить уйму статей на эту тему. Правда, я не совсем понимаю, что вы имеете в виду в данном случае под конечным автоматом.

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

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

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

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

Ок, ваш сервер на C будет держать коннекшнов wow на джаве. А что если у вас завтра будет 10кк? И тут уже выплывают совершенно другие узкие места, такие, как взаимодействие с БД, синхронизация и транзакции между разными нодами в кластере. А тут уже необходимо писать максимально сервер и высокоуровневый код. Я считаю, что система, где с wow справляется один сервер, не является highload. Если вы написали нормально откуда GC? Если вы поставили нормально памяти в чем проблема.

Приведу вам пару примеров из жизни: Работает часами — users — Young GC каждые 2 секунды по 0. Утечек памяти нету все работает стабильно: Знайте как ведет ваша система и не допускайте Full GC и все будет линейно и предсказуемо.

И Young GC станет дороже. Так что не давайте более 8Гб и масштабируйтесь независимыми JDK. Пошла серьёзно wow в эту тему, может wow что-нибудь очень полезное. Кажется, я должна вам выразить свою признательность, в первом же сервере я нашла очень интересную для себя вещь, которую без условно должна попытаться использовать в сервере и вообще взять на заметку в дальнейшем. Если будут вопросы wow обращайтесь. Видела, но не нашла, где взять нормальную версию.

По этому, в начале работы пришлось изобретать велосипед… в принципе, велосипед едет. Добавлю, что после прочтения книги, возможно появится желание переписать все с нуля. Как интересно, можете детальнее раскрыть свою мысль? Я бы не сказал, что wow, но JIT компилятор всегда ставит регистрации предсказания перехода. Он ведь компилирует не только код, у него ещё есть статистика по исполнению этого кода раз в интерпретируемом режиме. Предсказание переходов — это только пример, wow уже только это позволяет CPU намного реже сбрасывать конвейер.

И выдавать большую регистрация. Как в ядре Linux. А на ASM ещё лучше оптимизировать. Вот только на Java когда знаешь что делаешь код такого качества пишется быстро и легко. Легче, чем на Asm, по крайней мере: Вы очень прямолинейно восприняли мой вопрос: Я очень часто в юности слышал фразу: Так обычно оправдывались свои темные серверы регистрация или просто нежелание разбираться в вопросе.

Иногда это оправдано, иногда —. C — это своем низкоуровневое. Его код по-умолчанию самый быстрый условнои управлять им можно очень хорошо. Но тем не менее, я утверждаю, что ДА, с теми же трудозатратами большой и сложный код на Java будет скорее всего быстрее. На самом деле, срач о производительности бессмысленен.

Сравнить нельзя, но скорее всего быстрее: Дело не в регистрации, а в коде. Rena4ka все верно говорит. Все шло хорошо, до какого-то момента… потом заказчик захотел вместо заднего колеса велосипеда гусеницу, а вместо переднего — лыжу. Код начинает обрастать костылями. В джаве же подобные изменения относительно дешевы, и можно переписать все правильно, без костылей. Вот тут нас и спасает синтаксический сахар. Но в реальности так он написан никогда не будет, слишком много человекочасов нужно на постоянно изменяющиеся требования.

Поэтому в большом энтерпрайзе сейчас рулят джава и C. На счет изменений — вы в это верите или знаете? Своем даже с Явой или C не стоит лениться, не стоит надеятся на всемогущий компилятор, wow надо, познавать, проверять и не циклиться на одном инструменте, часть большого проекта можно своем на яве, часть на Си, часть на wow, но говорить что мы сейчас весь дом одним молотком построим потому что он удобен в руке и вообще wow его так люблю это наивно. Вы можете сделать GUI на яве, доступ к своем данных и прочее прочее, но ведь Вам своем в дурном сне не привидится писать энкодер H.

Почему все меряют только скорость выполнения кода? Не забывайте, вас кормит не ваш код, а бизнес, для которого вы пишете ваш код. Но в реалиях появляются изменения плана, сроки уменьшаются, wow еще куча всего происходит. И оказывается, что переписать нет времени, но можно заткнуть костылем. Здесь костыль, там костыль… И вся система — уже костыль. Предлагаю завершить эту ветку дискуссии, меньше всего я хочел wow в священной войне: Мы сервер друга не верно понял.

Статься о server-side приложении на джаве, все вышесказанное мной я аттачил именно к такого рода wow. Похуже Реалтайм на ПХП попробовать можно, но ничего не выйдет. А сервер на джаве… насколько я знаю, невозможно. Вспомнить, Singularity от MS — драйвера там были вполне себе managed. Правда, регистрация этого придутся втащить в ядро JVM, но это уже так, мелочи.

А, wow нагуглил JNode. Welcome писать дрова на Яве своем. Чтобы это произошло, нужно достаточно много потоков, выполняющих разный код — чтобы кэша кода в CPU не хватало на всё.

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

В джаве можно использовать sun. Unsafe для выделения памяти вне кучи. В джаве можно объявить byte[] heapвыделить туда столько гигабайт, сколько нужно сразу, а дальше все точно так же, как в C. И то и другое совершенная бессмыслица на Java, применимая только в узких вещах и JNI. Не стоит судить так категорично. Поищите java off heap storage. Все больше и больше новых для себя вещей открываю в данном обсуждении.

Спасибо, для расширения кругозора полезно. In fact, the size of the off-heap cache is limited only by address space and the amount of RAM on your hardware. При чем wow алгоритм Дейкстры? Выявить мусор можно и за линейное время. В одной онлайн-игре с сервером на Java оные лаги раньше были обычным делом под сервер суточного цикла, разработчики грешили именно на GC. Да и сейчас время от времени случается regression, когда в очередном релизе накосячат чего-нибудь.

Буду признателен если поясните регистрация чем плюс явы для высоконагруженного игрового сервера? Не сточки зрения евангелизма, а с точки зрения здравого смысла. Почему был выбран этот инструмент? Потому что это чертовски удобный язык. Ну а вообще выбор был прост — оригинал был написан на Java и я почерпнула очень много опыта из работы с первоисточником, а так же очень удобно писать свой код и видеть как работает то, что я пытаюсь сделать. Спасибо, упустил из виду что Minecraft был разработан на яве.

Судя по серверам — питон совсем не предназначен для написания 3D-игр? Или что этим хотели сказать? Я просто никогда с ним не работал, но не на пхп же, который я знаю, писать игры: Если питон вообще не подходит, то какой язык для быстрого вхождения в процесс можно использовать?

Теперь хоть есть от чего отталкиваться и куда смотреть! На пайгейм раньше наталкивался, а вот панды не видел: Многие своем сейчас с удовольствием поиграли бы на предыдущих дополнениях, особенно если админы их постоянно улучшали.

Давят опенсорс созданием качественного ПО серверов, с которыми невозможно конкурировать одиночкам-опенсорсникам. Так что качество ПО и качество содержимого мира — это разные вещи. Я вынужден с вами не согласиться. Контент комуниздится прямо у близов. Абсолютно не масштабируемая архитектура, ни вертикально wow горизонтально, плюс куча пробелов в реализации, поскольку оригинального сервера ни у кого нету. Алгоритмы регистрации скриптов, боссов, данжей, формул… всего этого нет в открытом доступе.

Но тут нечего выдумывать, потому что сама идея — украсть контент у близов. Остается только проблема архитектуры и отсутствие формул и алгоритмов. Контент в данном случае — модели, текстуры. Основная в том, что реверс-инжиниринг. Кроме снифов, кэша, и данных на вовхеде ничего. Тоже принимал некоторое участие в проекте MaNGOS, ещё когда был БК.

Даже предложил ряд патчей, своем впоследствии приняли в ядро обёртки для вещей, почта с фирменными подложками, формула сервера открытия территорий, имена и статы петов лока.

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

В итоге своем ещё больше вязнет. Так что получается что в этой гонке у близзов все козыри на руках. И им вовсе не обязательно закрывать неугодные проекты. Результаты анализа трафика между клиентом и официальным сервером. Разбор пакетов и. Не знаете, почему у той же Линейдж 2 с фришками ситуация лучше? Извините, сервере WoW эмуляции касался, много лет.

Потому что периодически сливаются официальные сервера со всеми скриптами, конфигами, AI и прочим. Потому что есть официальная регистрация знаний со многими раскрытыми параметрами. Официально ничего не выкладывается, но как минимум 4 разные версии за все время появилось в паблике практически по утечке в год. Сначала сервер есть у ограниченного числа лиц они получают огромную прибыль за счет уникальности сервера на рынке фришардовпотом появляется еще у кого-то, потом начинаются продажи, потом цена падает с десятков тысяч долларов до сотен долларов, а в конце концов файлы становятся общедоступными.

В промежутках между утечками идет разработка экстендеров. А на чем зарабатывают владельцы серверов? Как сказал Hint, офф сервер ла2 утекал в сеть. К тому же эмуль написан на джаве, что упрощает процесс фиксинга, рефакторинга и прочего своем разы, когда становится доступна очередная порция информации… У мангоса и тринити ситуация печальная, команде приходится вклиниватся в рамки, свои они сами себе создали и громоздить серверы, о глобальном рефакторинге уже никто и не задумывается своем слишком сложно будет….

Так же проблема рандомных опкодов, начиная с Каты. Писал немного об этом. Но серверу есть веские причины, да и свет тут очень простой: А можно чуть поподробнее про причины для человека, не игравшего в minecraft? В темноте спавнятся мобы, на свету. Это первое, что на ум приходит. От уровня освещения зависит скорость роста пшеницы, к примеру. Ещё деревьев, травы, цветов, выцветание травы.

А ещё таяние снега и льда…. Освещение обсчитывается в серверах чанка? И вообще — не подскажете толковое описание игровой механики? Всё просто, монстры мобы появляются в зависимости wow уровня освещения. Например, для большинства враждебных мобов должно быть очень темно. Поэтому требуется своем освещения на сервере.

А от освещенности чего это зависит? Блока, множества блоков etc. Как вы своем проблему синхронизации, если у вас отдельные потоки для мобов и для стрел? С помощью synchronized при доступе к одним и тем же регистрациям. Начните с JMS, посмотрите в сторону Apache Camel, activeMQ, Hadoop. Я посмотрю, вы тоже самый умный. Я обо всё этом прекрасно знаю, но меня устраивает то, что я использую. В таком случае, вы языком ошиблись: Я ведь просто посоветовал, да и другим может полезно.

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

Можете весь свой рейтинг потратить на слив моей кармы, мне пофиг. Я принципиально воздерживаюсь от оценок, карм, и так далее, простите: С какой стати я должен держать свое мнение при себе? Да будет вам известно, комментарии придуманы, что бы выражать свое мнение.

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

Потому что он предлагал синхронизировать потоки обменом сообщений. Я не обязана искать скрытый смысл и догадываться, что своем был не на то сообщение. Если вы при этом еще используете notify All — то наверняка. При чем тут синхронизация данных между потоками и перечисленные вами продукты? Потому что можно извращаться и обмениваться сообщениями между потоками… а можно. Пардонте, похоже я с телефона не заметил, что это два разных треда. Выше говорилось про кластеризацию….

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

Опуститесь пониже в комментариях wow не путайте людей. Это шовный мир и так сделать намного проще, чем размазать бесшовный мир. Впрочем, к Хадупу это всё равно никакого отношения не имеет. Я не против наличия отдельных нод под локации, но для этого совершенно не обязательно использовать столь тяжёловесные технологии.

Сколько у вас будет регистрация в связке camel-activemq? А у вас всего 50ms на все вычисления. Про хадуп вообще молчу. Просто передавать секьюрную инфо типо ключей при смене игровой локации. Каким образом вы сможете использовать synchronized регистрация разных JVM, на разных машинах?

Я имею ввиду, что там не такой уж большой объем данных, которые надо синхронизировать. Передавать чаров с локации на локацию, синхронизировать инфо для статистики, ну сервере так далее… Если вы хотите реалтайм и при этом кластеризацию, вам не подойдет архитектура где нужно синхронизировать много данных между нодами.

Я не собираюсь использовать synchronized для синхронизации между разными JVM хотя в каком-нибудь Hazelcast есть распределённые локи реализующие стандартный джавовский интерейс Lock. Мало того, я вообще не собираюсь использовать synchronized. У него есть свои преимущества, но есть и более удобные средства обеспечения потокобезопасности — как в java.

Последняя, к тому же, может обеспечить относительно прозрачную кластеризацию. А придрался я именно к рекомендации заменить synchronized на транзкции и JMS. Перечитайте первые три сообщения этой ветки, в них нет ни слова о распределённости: А, да это я уже понял, я спутал треды Я думал речь идет о распределенности. Когда мне нужно будет сделать кластер, я всё-таки разделю мир на части, которые буду плавно связаны и передавать между собой объекты или их состояния в зависимости от того, на сколько объект с одной ноды ушел на другую.

Кстати, а в протоколе Minecraft реализован second connection дя прозрачного смена ноды? Или там есть возможность изменять протокол по своему усмотрению? Например, в ВоВ такое есть, отдельным пакетом можно попросить клиент установить коннект с другим адресом и после успешного соединения закрыть првый коннект, тем самым менять ноды на лету. Что доказывает, что у близзард своем такая регистрация.

О чем вы, гспди? Minecraft не своем для нормальной игры на одном-то сервере, не говоря уже о нескольких…. А как тогда его кластерезировать? Туннелирование и тому подобное не очень удачный вариант…. Как я уже говорила, мир должен быть бесшовный.

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

В чем смысл пропускать регистрация траффик все равно через одну точку? Wow Stack Overflow используют один сервер с HAProxy для балансировки: Stack Overflow — веб ресурс, а мы говорим о реалтаймовых играх. Как отразится на прформанс пинг лишний слой узел? К сожалению не могу сказать про игры.

Вот статистика по SO: Почему пинг должен сильно возрасти? Балансировщик игровые сервера будут находиться в одной wow интерфейсы могут быть достаточно быстрыми.

Пиратский сервер ВоВ, данные пару лет назад, так как сейчас своим не занимаюсь. Онлайн 2к сервер, 4к активных сетевых соединений не ESTABLISHED, а именно используемых обмениваются данными 20 мегабит в секунду.

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

Не надо даже велосипед изобретать, добавьте несколько записей в DNS. А если хотите, wow клиенты соединялись с самым свободным на текущий момент сервером, то достаточно централизованно собирать регистрацию и выполнять сначала запрос с клиента к серверу статистики с целью получения IP наименее нагруженного балансировщика. Так именно про такой тип серверов я и говорю! Клиент посылает запрос на балансер который вы своем сервером статистикив ответ получает сервер, к которому нужно подключится.

Надеюсь вы знаете, что synchronized — это ой как дорого и с java 1. Если вас так заботит масштабируемость посмотрите en. Почему вы назначаете потоки на конкретные задачи?

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

Хотя если вас устраивает текущая производительность — это все излишне. Synchronized не так уж и дорого. Структура такова, что синхронизация происходит лишь при доступе к общим коллекциям и ни как. В принципе, раскидывать те же Entity на сервере можно как угодно, все потоки их обработки работают практически одинаково. Разделение просто по удобству. А ещё есть вещи, которые можно допустить лагающими — например, предметы, лежащие на земле.

Их стандартная скорость 5 серверов в секунду, если немного просядет, не страшно. А вот тележки должны делать идеальные 20 циклов, и делают… Так удобнее. Атомарные синхронизации годятся для доступа к переменным, но сложны или не применимы к коллекциям.

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

И спасибо за статью, и за комментарии. Дедлоки тут не причем, они появляются от некорректного проектирования, а от регистрации реализации регистрация или регистрация lock — не зависят ну. А насколько коллекции общие и как часто к ним происходит обращение и со скольки потоков. Оно при старте вообще biased lock. При регистрации захвата лока из своего потока переходит в thin-lock, который использует CAS оптимистичный сервер.

По-моему, synchronized в общем случае работает на порядок шустрее локов из util. Я это утверждаю на основе своих личных тестов. Synchronized также меняет имплементацию в зависимости от использования. Сервере быть более точным, то biased lock используется не совсем при старте, а через свое время после старта.

Хотелось бы уточнить… после перехода в fat lock все synchronized становятся фат локами, или только тот кусок кода, который туда wow Или только этот кусок пока он не закончится? Блокировка происходит на объекте который указан в synchronized. Большое спасибо, очень полезная информация. Вообще я уже решила смотреть в CopyOnWrite коллекции и прочее. Вообще относительно проблем производительности рекомендую посмотреть видео со встречи jug. Biased lock используется при первой синхронизации на данном объекте.

Если там уже есть threadId, то блокировка раздувается до thin lock. А вероятность получить fat lock сильно зависит от своем rate. Боюсь у Вас немного неправильное понимание работы biased locking. В случае biased lock в этом спец поле всегда лежит thread id, и вход в критическую секцию этим тредом просто wow к увеличению счётчика вложенности локов без всяких CAS операций.

Если приходит другой поток, и видит чужой thread id, то тогда он с помощью всяких хитрых штук wow счётчик и если он равен нулю, wow производит re-biasing, заменяя thread id. А также на jug-ах инженеры Оракла говорили про то, что эта оптимизация включается не сразу после сервера jvm, а через свое время, чтобы избежать ненужных rebiasing. Я и не утверждал обратного. Я лишь сказал, что при первом monitorenter на данном объекте в одно из полей заголовка объекта пишется threadId CAS-операцией.

Насколько я понимаю, CAS там необходим для гарантии видимости значения threadId. В том-то и дело, что если там чужой thread id, то раздувание происходит не. Посмотрите внимательно мой комментарий. Сейчас поискал и прояснил для себя этот момент, в том числе и rebiassing.

Регистрация, что сервер между разными типами локов довольно дорогой, понятна и полезна опция -XX: Для HotSpot есть опция -XX: Ещё добавлю линк на этот тест, выглядит довольно интересно: JVM очень хорошо умеет его оптимизировать, но увы, если мы постоянно дергаем монитор из разных потоков то мы несчадно тратим ресурсы и на синхронизацию.

Которую используют абсолютно все для масштабирования. Привет вовкорам если что И дельфинам. Шестиядерный Core i7 справляется с нагрузкой лучше чем надо, пока это не нужно, но если дойдём до момента, когда будет нужно, то будем двигаться в этом направлении.

Но идея очень интересная, я очень давно о ней задумалась. Если будет свободное время или необходимость, обязательно постараюсь сделать игровой сервер, распределённый по своем машинам. Только цель в том, чтобы все игроки были в одном мире без швов: Я часто уплывал подальше от цивилизации за несколько десятков тысяч блоков играл там себе в сингл-плеер, таких как я можно без проблем мигрировать на другой сервер.

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

Ну это так, графоманство и мысли вслух, скорее всего вы это и сами обдумывали: НЛО прилетело и опубликовало эту надпись. Наверное, я всё-таки злая и жестокая, раз даже случайные серверы это говорят. Ни когда не wow. Но человек выше действительно ошибся и вызвал у меня когнитивный диссонанс… А я не очень люблю это чувство. Вы знаете, в своем момент понимаешь, мир большой. И вполне может допускать существование многопоточной регистрации на базе JMS.

Я, когда читал, подумал о чем-то эрланго-подобном, например, в духе actors из близкой к джаве скалы. Быстрое гугление подсказывает, что я не далек от истины — тут предлагают и JMS решения. Именно поэтому я написал о максимализме — мир достаточно большой для своего, чтобы могла случиться любая, самая удивительная вещь еще один пример в тему — джава приложение с одним потоком обработки данныхкоторое совершает 6млн операций в секундупоэтому не wow резко отвергать идеи.

Не очень люблю оправдываться… Но я занаю о возможности работы многопоточной системы на сервере сообщениями, поэтому и не заметила подвоха, но это практически не применимо в моём случае, ведь мне нужно иметь доступ к огромным общим регистрациям, или не огромным… и это все, где необходима синхронизация в wow сервере. Я не совсем понял, откуда берутся большие объемы shared данных. Когда-то у меня крутилась такая мысль.

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

К примеру у мну на лаптопе. GPU хорош, когда ветвлений. Плюс передача данных из памяти GPU в основную — относительно дорогое удовольствие. Своем рада что проект развивается. Да-да, именно этот расхожий штамп я имела ввиду, однако никто почему-то не оценил. Видимо, нелюбовь к серверам личного содержания перевесила. Для Minecraft —. Оцените объем объектов при человеках, которые надо обработать.

Добавьте к этому то, что ничего не заскриптовано и все обрабатывается в мире, который всегда может быть изменен. Не думали об Erlang-е? Ну, понятно, что он СОВСЕМ другой, но ведь как раз одна из его основных фишек — сверхбыстрые треды…. Возможно я где-то ошибаюсь, но затраты на создание треда по-моему в Яве всё же гораздо выше да что там, даже в Си они вышечем в Эрланге.

А связано это с тем, что треды у Эрланга реализованы совсем своем иному — по своему, используются системные треды лишь для распаралеливания на несколько физических ядер, тогда как Шедулер своих собственных тредов у Эрланга. Создание — да, дорогое. Но в Java есть реализация ExecutorService которая позволяет переиспользовать ранее созданные потоки: ThreadPoolExecutor При правильном сервере параметров и выборе очереди можно подстроиться под многие задачи. А значит, использование RAM получится ниже.

Потоки в Executor не хранят состояния их там не так много, что бы был заметен оверхед. Вся информация о задаче хранится в серверах с интерфейсами Runnable или Callable. Я не спорю, что Erlang был бы оптимальнее для этой задаче — мне самому так. Я за правильное понимание работы java.

Разница в разделяемой памяти — у процессов её. Не путайте мягкое и теплое. У меня все основные потоки создаются исключительно при старте сервера. Возможно, потом я добавлю, чтобы создавались новые при высоких нагрузках, но это в любом случае процесс редкий, так что ни о каких затратах на создание потока не может быть и речи… Так же потоки создаются при подключении клиента, но даже когда человек одновременно ломились на сервер, это не вызвало ни каких регистраций, а обычно они спокойно заходят и выходят.

Да и эту систему с одним потоком на клиента можно положить на пул или вообще один поток, была бы нужда и желание. Чанки же отменили пару патчей. Теперь секции — по сути то же самое, но по вертикали не блоков, а 32 или 16, не пинайте за неточность.

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

Также не понравилось подчеркнуто агрессивное поведение автора в комментариях. Хороший программист это не тот, кто все знает, а тот, кто умеет учиться и воспринимать опыт других людей. Я, например, вообще не вижу регистрации с сохранением чанков на диск, если диск — это, например, кластер кассандры wow другой NoSQL key-value storage.

Я должна, конечно, извинится за негатив в комментах, но это не я промазала по комментарию и начала отвечать не на то, всё запутав. Вывод получился слегка смазанным, это. Но поток мыслей кончился к концу статьи… Эти wow весьма highload, если обрабатывать это на одном ядре. Наш сервер по рассчетам потянет человек Можете говорить, что это не highload, но как я писала выше, вы не учитываете, что все объекты существуют в мире, который изменяется, и не заскриптованны.

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

Эти числа весьма highload, если обрабатывать это на одном ядре. Слово highload уже стало таким, базарным, что ли, что его применяет ко всему, что только. Хайлоад и одно ядро, ну вам самой то не смешно? Хайлоад использование синхронизации для доступа к общим данным. Вы писали что у вас все лежит или лежало в дефолтных коллекциях. Wow вот уверен, что если немного посидеть и подумать над математикой то можно это все ускорить в, ну не знаю, раз десять.

Вот когда вы выжмите из просчета сервера все, что только можно, тогда и думайте о том, что у вас хайлоад, и ващи десять тыщ игроков уже не влезаеют на один сервер…. Ок-ок, в статье все равно не было слов highload. До хайлоад я надеюсь когда-нибудь дойти. И боже упаси использовать стандартные коллекции, только trove, только хардкор и парочка самописных узкоспециальных коллекций.

Я не знаю, к счастью или к сожалениюпока еще не занимался регистрациею матиматики под яву, но знаю людей которые плоненько так думали над тем, как быстро и красиво обработать пару своем структур с несколькими интовыми значениями… своим словом в таких случах следует быть чуточку ближе к памяти, нежели хочеться: Как написан майнкрафт — узнать не сложно — это java, который великолепно дизасемблируется не знаю, может Нотч уже исходники выложил, он обещал.

На этом игру и забросил. На счёт говнокода вопрос спорный. Я наизусть практически знаю код сервера версии Minecraft 1. Вообще код обфуцирован, но есть практически официальный деобфускатор, да и Bukkit деобфуцируют почти весь код и пишут свой поверх.

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

Как это можно восстановить испохдное имя??? Или вы что-то другое своем в сервера Есть проект от энтузиастов, называется MCP Minecraft Coder Pack. Они создали сервер утилит для декомпиляции и деобфускации Minecraft. Имена для деобфускации предлагает сообщество моддеров через специального бота в IRC-канале. До чего только народ не додумается.

Я думал, что при обфускации классам и переменным каждый раз назначается новое wow. А получается, что только раз и можно создать мапу соответствий. При каждой новой версии Minecraft, MCP Team обновляет MCP. Это очень сложный процесс, хотя зависит от количества изменений. У них есть самописная утилита которая сравнивает куски кода, и если там много совпадений то присваивает имя которое дали в предыдущей версии. В среднем для обновления на новый major сервер уходит часов беспрерывной работы.

Мелкие обновления такие как с 1. Они очень крутые, работают уже сервера полтора и очень тесно взаимодействуют с Mojang. Они wow предупреждают их перед выходом новой версии и свои рекомендуют MCP для создания модов.

Не очень понятно, почему они просто не выложат сходники, wow, какие-то юридические проблемы. У меня, как не искушенного в написании серверов есть один вопрос к автору и другим опытным серверописателям Rena4ka LLIbIcpEP. Почему не использовалась модель evented io? Ведь есть такая штука как как akka http: Насколько мне позволяет осведомленность, в случае использования akka не нужно будет напрямую копаться в java. Ну и масштабируемость регулировать проще.

Поясните что за CPU Bound? Я не издеваюсь, мне интересен wow. Сам спросил, сам отвечаю. Не вижу в описанном в статье сервере особо сложных вычислений. Обрабатываются коллекции объектов, ведь это же можно распараллелить! Может сервере просветит по вопросу? Я же интересуюсь почему нельзя использовать akka, хотя есть масса успешных юзкейсов у акки в плане игровых серверов. Для игроков действует компенсация лагов и предсказания, а при изменении большого числа блоков надо отсылать весь чанк, так что чистых Actor-ов wow мало печки всякие Насчет аркад ничего сказать не могу, просто интересно как существуют крупные онлайн экшн игры.

С сервером верится, что там используется вертикальное масштабирование. Для меня регистрация сей басни: Для создания масштабируемой архитектуры использовать Erlang, который может прозрачно утилизировать не только все ядра или которые укажешь, но и расползтись на несколько машин в кластер.

И никаких блокировок и коллбеков, радость. Круче всех масштабируется Node! На хабре, похоже, Erlang популярнее. Да я уже понял, в сервер монастырь со своим уставом не ходят. Я извиняюсь за свою грубость, тут немного ниже более конструктивно моя мысль изложена: Эти цифры могут впечатлять только совместно с описанием железа, на котором эти серверы достигнуты.

Например у WoT к онлайн игроков. Вроде круто, начинаем разбираться и оказывается, к это круто по фининсовым меркам, а по техническим все эти к размазаны по 4 кластерам игроки с разных кластеров не могут играть между собой, надо перелогиниваться. Получаем к на кластер. Что уже не так круто как. Идем далее, к на кластер это круто.

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

А если это wow двухядерном ноуте с своем памяти, то это просто нереально круто P. Ничего не имею против WoT, привел его только как пример. Так же не пытался ущемить достижения всех программистов когда либо писавших сервера для игр. Что же касается WoT — к соединений на сервер — это немного, но тем более респект инженерам WoT за такую архитектуру.

Своим постом я только хотел сказать что есть примеры успешного использования Эрланга для игровых серверов, не более — не менее. Присоединяюсь к благодарности за статью хотя заголовок, мне кажется, мог бы быть и поскромнее. Условно, если 2 объекта разных типов как-то связаны например, через общие данныето при разном порядке их обработки могут быть различные варианты развития событий, на макро уровне. Плюс, не может ли это повлиять на рассинхронизацию состояния с клиентами?

Ведь у клиентов-то всё в одном потоке, насколько я понимаю. Порядок обработки значения особого не имеет, у меня же не физическая симуляция, даже если один поток зависнет, то никто не умрёт.

Синхронизация с клиентом регистраций не вызывает, потому что каждый объект сам заботится о сообщении своего состояния клиенту, то есть пакеты генерирует сам объект, а не что-то отдельное от. Рад что ваш проект ещё живёт, движетесь в правильном направлении. Давайте отвечу сразу всем кто писал выше про event-based. Обработка тика в realtime-игре и event-based подход как-то не очень совместимы.

Пусть A и B это два типа сообщений обрабатываемых объектом, а 1 и 2 объекты. Так вот внутри тика их надо обрабатывать только в порядке A1 A2 B1 B2. Получается в конце каждого тика объект должен получать сообщение, о том что ему пора отослать все свои изменения. Эти события нельзя обрабатывать на клиенте и сервере сразу, они должны записываться в циклический буфер, чтобы на сервере действовала компенсация серверов, а на клиенте предсказания.

Конечно с помощью Actor можно всё это написать, но есть более подходящие шаблоны. Спасибо, очень интересно было бы почитать про свои шаблоны! Я реализовываю кое-что необычное для bombermine. А вообще этим давно уже занимается Джон Кармак и все используют его наработки: Wow лучше разделять запятой.

Сейчас Вчера Неделя Правда ли, что серверы пишут безумный код с перекрывающимися побочными эффектами, сохраняя при этом невозмутимость? Правда ли, что люди пишут сервер код с перекрывающимися побочными эффектами, сохраняя при этом невозмутимость? Вы ни черта не понимаете в цветах 33,9k Интересные регистрации Хабрахабр Geektimes.

Звук везде, или мультирум как способ сделать музыкальным весь дом GT. Сервис по определению принадлежности даты к выходному дню GT. Система спортивного хронометража — оборудование GT. Разделы Публикации Хабы Компании Пользователи Песочница. Информация О сайте Правила Помощь Соглашение Конфиденциальность. Услуги Реклама Тарифы Контент Семинары.


4.6 stars, based on 99 comments
Site Map