Сайт восстановлен из веб архива. Сейчас он доступен только для чтения, скачивание материалов также недоступно. Если у вас до сих пор есть какие-то вопросы по разработке серверов CRMP, вы можете перейти на актуальный портал: https://pawno-rus.com

Перейти к содержимому

Уважаемый гость, если у Вас возникли проблемы с регистрацией, просьба обратиться в тех.поддержку или на почту admin@pawno-crmp.ru

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

Фотография
Мануал

Оптимизация | Индивидуальные таймеры

- - - - - criminal russia crmp pawno уроки crmp крмп

  • Авторизуйтесь для ответа в теме
В этой теме нет ответов

#1
offline   ac1nve

ac1nve
  • 267
    • Сообщений: 489
    • Регистрация: 23.02.16

Добрый день. 

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

Почти в каждом моде есть таймер, допустим на 1 секунду. В этом таймере есть цикл на всех игроков сервера, где с ними производятся действия. Например:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Именно из за таких таймеров серверы с большим онлайном начинают испытывать лаги и ищут более мощный хостинг. Всё дело в том, что одно срабатывание из foreach (для одного игрока) проходит например за 0.25 - 1 мс (в зависимости от оптимизации и мощности процессора), что впрочем то не так уж и страшно. Но когда игроков 200, выполнение таймера занимает уже от 50 мс до 200 мс каждую секунду и пока весь таймер не закончит своё действие, сервер своими делами не займётся (синхронизация игроков и т.п.), поэтому в эти 200 мс сервер тупо висит - вот она причина лагов. Теперь давайте разберём как избавиться от этого и не мешать серверу заниматься необходимыми для работы сервера делами.

 

1) Убрать из ВСЕХ таймеров такие циклы с игроками. 

2) Объявить глобальный массив (ко всем new):

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

3) Ко всем forward:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

4) В OnPlayerConnect:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

5) В OnPlayerDisconnect:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

6) В конце мода:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

В итоге мы получим индивидуальный таймер для каждого игрока, да, их будет 1000 при максимальном онлайне, но ничего страшного - серверу только лучше. Теперь все действия с игроком нужно использовать в PlayerUpdate (он срабатывает каждые 250 мс). Отдельные таймеры на 1 сек и т.п. создавать не нужно, просто подсчитывайте количество срабатываний PlayerUpdate (1 сек = 4 срабатывания) и выполняйте нужные действия.

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

На этом всё, надеюсь что объяснил достаточно понятно. Удачного скриптинга!

 

Автор: XemyL


Сообщение отредактировал ac1nve: 15 Июнь 2017 - 21:42

  • 4



Темы с аналогичным тегами Мануал, criminal russia, crmp, pawno, уроки crmp, крмп

Количество пользователей, читающих эту тему: 1

0 пользователей, 0 гостей, 0 анонимных


    Alexa (1)

Данную тему посетили 30 пользователей