В этой теме я расскажу немного технических подробностей о сервере minecraft.
Речь идет о сервере на java, предоставляемым нотчем, а также это актуально для всех модификаций этого сервера(craftbukkit, hey0).
Сервер работает в несколько потоков, несколько сетевых, которые обрабатывают сетевой трафик с клиентами, один поток, слушающий консоль сервера и еще несколько на мелкие нужны.
Большая часть событий(95%) на сервере происходит в едином потоке, в одном цикле. В этом цикле каждый раз происходит проверка всего, что может произойти в мире и проверка, не изменилось ли что-то в мире. Если что-то изменилось, то происходят соотвествующие действия с массивом объектов в памяти.
Минус этого подхода в том, что пока все объекты не проверятся, перехода на следующий шаг цикла не получает ни единый объект, зависящий от этого цикла. То есть каждый объект, каждое движение тележки(к примеру), ждёт, пока весь остальной мир доделает свои дела. По сути майнкрафт является пошаговой игрой. Этот подход абсолютно не приемлим для сетевой игры с количеством юзеров больше 10, не находящихся в локальной сети. Нотч, очевидно, писал необычную игру для сингл-плеера, с очень, очень, пробной, сырой, и как показал опыт - неудачной, версией мультиплеера.
Приведу практический пример. Такими объектами являются в частности стрелы, тележки, лодки, кубики лежащие на земле, мобы, даже солнце. Когда на сервере 110+ игроков, все что-то делают, в сумме получается чудовищное количество объектов, ожидающих своей очереди на обработку. Каждый из них ждёт каждого другого. Врезультате этого наблюдается чудовищное "замедление времени". Если игроков будет еще больше - будет еще большее замедление времени.
Каждое движения моба, каждое движение стрелы, тележки, лодки происходит гораздо реже, чем оно должно происходить. В цифрах - в идеале, по мнению нотча, должно происходить 20 циклов в секунду. Фактически, на многих серверах, и на нашем в том числе, приходит не больше 10. Для справки - наш сервер очень мощный и для сравнения мог бы потянуть 800-1000 человек на сервере wow. Более того, я даже с уверенностью могу сказать, что наш сервер решительно самый мощный в рунете среди серверов майнкрафта.
Однако у нас стрелы летают пошагово, мобы очень редко совершают движение, и так далее. Недавно мы вынесли обработку движения солнца отдельно от этого цикла, и дни-ночи стали короче. Однако оно всеравно находится в одном потоке, и происходит не со скоростью 20 циклов.
Что хочет делать администрация GreenCubes.ru в связи с этим?
Мы планируем переписать эту систему, либо целиком весь сервер в соответствии с более подходящими для мморпг концепциями, сделать более независимые объекты. Подробности нашей реализации будут храниться в тайне.