PDA

Просмотр полной версии : [Вопрос] ackslimit



punkochel
21.12.2020, 12:00
Как-то давненько я сталкивался с проблемой, которая крашит сервер, или кикает игроков если сервер пытался передать им слишком много данных за короткий промежуток времени (acks (https://en.wikipedia.org/wiki/Acknowledgement_(data_networks))).
Побродив по просторам интернета нашел информацию, которая никак не подтверждена, что якобы оптимальный размер данного параметра составляет 5000/sec. А что делать если он превышает 20 тыс.?

Так вот, как же все-таки быть с этим? Чем может грозить увеличение значения параметра ackslimit до 7-8-значных значений?
Давайте уже раз и навсегда разберемся с изложенной проблемой, ибо зачастую подобные темы всплывают на различных Pawn-форумах.

UPD:
Сейчас же хостинги стоят на серьезном железе, неужели они не смогут справиться с отправкой килобайтного пакета пользователю?

Daniel_Cortez
22.12.2020, 17:16
Так вот, как же все-таки быть с этим? Чем может грозить увеличение значения параметра ackslimit до 7-8-значных значений?
Подверженностью атакам, вызывающим перегрузку на сеть со стороны сервера, причём справедливо это не только для ackslimit, но и для messageslimit.


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

Я давно практически ничего не делал в SA-MP (в последнее время работаю только над компилятором), но из того, что могу вспомнить, причинами превышения лимита пакетов могут быть:
Выполнение в таймере или цикле лишних действий, которые можно было выполнить только один раз.
Например, показ в таймере текстдрава (TextDrawShowForPlayer), который уже и так отображается, и функцию показа достаточно было вызвать только один раз (допустим, при логине игрока или входе/выходе из определённой зоны).
Большое количество маппинга в одном месте.
Банальные ошибки вроде показа диалога в цикле (https://pro-pawn.ru/showthread.php?13351).

punkochel
22.12.2020, 18:56
Вопрос 1: По сути, если все таки превышение дефолтного значения параметра ackslimit (3000/sec) произошло, то вероятнее всего, причиной является неправильно организованный код?

Вопрос 2: На сколько вообще оптимально значение 3000/sec, стоит ли его изменять до того, как произойдет выход за его пределы, дабы избежать этого?

Вопрос 3: Влияет ли количество игроков на сервере на данный параметр? Ведь, на сколько я знаю, это значение индивидуально для каждого игрока. То есть при большом онлайне данные не будут суммироваться?
Получается если ты один на сервере не смог найти функционал который поспособствовал бы выходу за пределы установленного значения ackslimit, то и при онлайне в 1000 игроков такого не произойдет, так как pawn является однопоточным ЯП, так это или не так?