[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 112: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 112: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 112: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 4505: Cannot modify header information - headers already sent by (output started at /includes/functions.php:3706)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 4507: Cannot modify header information - headers already sent by (output started at /includes/functions.php:3706)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 4508: Cannot modify header information - headers already sent by (output started at /includes/functions.php:3706)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 4509: Cannot modify header information - headers already sent by (output started at /includes/functions.php:3706)
GreenCubes • Просмотр темы - Немного технических подробностей
GreenCubes WikiИнформацияПремиум-магазинНачать игратьКарта мира

Немного технических подробностей

Всё о технической части GreenCubes

Немного технических подробностей

Сообщение Feyola » 07 мар 2011, 01:47

В этой теме я расскажу немного технических подробностей о сервере minecraft.
Речь идет о сервере на java, предоставляемым нотчем, а также это актуально для всех модификаций этого сервера(craftbukkit, hey0).

Сервер работает в несколько потоков, несколько сетевых, которые обрабатывают сетевой трафик с клиентами, один поток, слушающий консоль сервера и еще несколько на мелкие нужны.
Большая часть событий(95%) на сервере происходит в едином потоке, в одном цикле. В этом цикле каждый раз происходит проверка всего, что может произойти в мире и проверка, не изменилось ли что-то в мире. Если что-то изменилось, то происходят соотвествующие действия с массивом объектов в памяти.
Минус этого подхода в том, что пока все объекты не проверятся, перехода на следующий шаг цикла не получает ни единый объект, зависящий от этого цикла. То есть каждый объект, каждое движение тележки(к примеру), ждёт, пока весь остальной мир доделает свои дела. По сути майнкрафт является пошаговой игрой. Этот подход абсолютно не приемлим для сетевой игры с количеством юзеров больше 10, не находящихся в локальной сети. Нотч, очевидно, писал необычную игру для сингл-плеера, с очень, очень, пробной, сырой, и как показал опыт - неудачной, версией мультиплеера.

Приведу практический пример. Такими объектами являются в частности стрелы, тележки, лодки, кубики лежащие на земле, мобы, даже солнце. Когда на сервере 110+ игроков, все что-то делают, в сумме получается чудовищное количество объектов, ожидающих своей очереди на обработку. Каждый из них ждёт каждого другого. Врезультате этого наблюдается чудовищное "замедление времени". Если игроков будет еще больше - будет еще большее замедление времени.
Каждое движения моба, каждое движение стрелы, тележки, лодки происходит гораздо реже, чем оно должно происходить. В цифрах - в идеале, по мнению нотча, должно происходить 20 циклов в секунду. Фактически, на многих серверах, и на нашем в том числе, приходит не больше 10. Для справки - наш сервер очень мощный и для сравнения мог бы потянуть 800-1000 человек на сервере wow. Более того, я даже с уверенностью могу сказать, что наш сервер решительно самый мощный в рунете среди серверов майнкрафта.
Однако у нас стрелы летают пошагово, мобы очень редко совершают движение, и так далее. Недавно мы вынесли обработку движения солнца отдельно от этого цикла, и дни-ночи стали короче. Однако оно всеравно находится в одном потоке, и происходит не со скоростью 20 циклов.

Что хочет делать администрация GreenCubes.ru в связи с этим?
Мы планируем переписать эту систему, либо целиком весь сервер в соответствии с более подходящими для мморпг концепциями, сделать более независимые объекты. Подробности нашей реализации будут храниться в тайне.

Если вы хотите написать мне в личку:
Аватара пользователя
Feyola
 
Сообщения: 950
Зарегистрирован: 18 фев 2011, 22:48
Откуда: 日本

Re: Немного технических подробностей

Сообщение FreeZe » 07 мар 2011, 01:56

Эх, жаль что я не на Яве пишу, так бы смог помочь :(
Хорошая идея. Но есть вероятность что Нотч сам до этого не додумается. Хотя бы в финальной версии, если игра доживёт до неё )
FreeZe
 
Сообщения: 20
Зарегистрирован: 01 мар 2011, 23:57

Re: Немного технических подробностей

Сообщение jarent » 07 мар 2011, 21:04

Спасибо за информацию, мне как программисту очень интересно. Только я специализируюсь на веб-разработке (groovy, grails, раньше - php). Хотя и на java есть опыт, правда давненько это было :) Сейчас вот заинтересовала тема серверов майнкрафта, как устроены, плагины и т.п., но пока не разобрался.

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

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

Расскажите, пожалуйста, подробнее. Очень интересная тема :)
jarent
 
Сообщения: 3
Зарегистрирован: 06 мар 2011, 18:33

Re: Немного технических подробностей

Сообщение A_Dick » 08 мар 2011, 01:43

A_Dick
 
Сообщения: 14
Зарегистрирован: 20 фев 2011, 10:38

Re: Немного технических подробностей

Сообщение Rena4ka » 08 мар 2011, 02:05

В данный момент мы дорабатываем код сервера на основе Craftbukkit, в разработке свой сервер совместимый с Bukkit и его плагинами (совместимость и нужда в ней пока од вопросом).
Аватара пользователя
Rena4ka
Judgmento desu no!
 
Сообщения: 9480
Зарегистрирован: 18 фев 2011, 22:46
Откуда: Информационное пространство Земли

Re: Немного технических подробностей

Сообщение Feyola » 08 мар 2011, 02:11

Ну, A_dick вобще правильно выразился.
Сама концепция программирования у нотчевского кода в корне не верна и не подходит под эту задачу.
Мы просто с нуля пишем своё.

Если вы хотите написать мне в личку:
Аватара пользователя
Feyola
 
Сообщения: 950
Зарегистрирован: 18 фев 2011, 22:48
Откуда: 日本

Re: Немного технических подробностей

Сообщение jarent » 08 мар 2011, 02:24

jarent
 
Сообщения: 3
Зарегистрирован: 06 мар 2011, 18:33

Re: Немного технических подробностей

Сообщение Feyola » 08 мар 2011, 19:54


Если вы хотите написать мне в личку:
Аватара пользователя
Feyola
 
Сообщения: 950
Зарегистрирован: 18 фев 2011, 22:48
Откуда: 日本


Вернуться в Технический раздел



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

cron