Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Прослушивание/Редактирование пакетов и асинхрон

ReloGGrc

Активный участник
Пользователь
Баллы
46
Имя в Minecraft
ALis
Как возможно правильно вынести в асинхронный поток прослушивания/редактирование пакетов? У меня почему-то были подозрения что оно и так происходит в асинхроне, но тогда бы у ProtocolLib'a не было опции ASYNC

Уточню: Мне не нужны примеры работы с использованием ProtocolLib'a, у меня самописный слушатель пакетов, мне нужно вынести его в асинхрон
 
Последнее редактирование:
Сомнительная затея, баккит просто не будет дожидаться конца операций в асинхроне и обработает пакет без твоих изменений.
 
Та вот и я думаю шот не то, и возникла идея сделать в асинхроне лишь прослушивание отправляемых/принимаемых пакетов без возможности их замены или отмены
 
Та вот и я думаю шот не то, и возникла идея сделать в асинхроне лишь прослушивание отправляемых/принимаемых пакетов без возможности их замены или отмены
ProtocolLib в помощь. Если всё же будешь их изменять, то можешь воспользоваться им
 
По-умолчанию в ProtocolLib'е обработка получения пакететов происходит в потоках Netty, а обработка отправки происходит в основном потоке сервера.

Чисто теоретически ты можешь вынести обработчики пакетов в отдельные потоки, но в этом случае порядок получения и отправки пакетов будет нарушен. Например, ядро отправляет на клиент пакет чанка и пакет спауна сущности в этом чанке. У тебя стоит какой-то длительный обработчик на пакет чанка. В итоге на клиент сначала прилетает пакет сущности, а уже только потом пакет чанка. В итоге на клиенте такая сущность больше и не отобразится, потому что для её "спауна" на клиенте обязательно должен быть загружен чанк.

Поэтому я практически уверен, что в режиме асинхронной обработки пакетов в ProtocolLib'е теряется возможность модифицировать и отменять пакеты. Да, их по-прежнему можно будет читать, но отсутствие чёткого порядка отправки всё ещё может стать проблемой, потому что логика работы обработчика тоже может зависеть от порядка.
Скорее всего, именно по этой причине асинхронный режим в ProtocolLib'е и не включён по-умолчанию: проблем от него может быть больше, чем пользы.

В теории можно попробовать вынести в асинхрон лишь некоторые типы пакетов, которые никак не влияют на порядок отправки и сами от него не зависят. Например, пакеты чата от клиента на сервер и в обратную сторону. По-моему, для них даже в самом Paper'е отдельная очередь: там боссбары и что-то ещё
 
Последнее редактирование:
ProtocolLib в помощь. Если всё же будешь их изменять, то можешь воспользоваться им
У меня собственная система редактирования/считывания пакетов, работает тоже неплохо
 
По-умолчанию в ProtocolLib'е обработка получения пакететов происходит в потоках Netty, а обработка отправки происходит в основном потоке сервера.

Чисто теоретически ты можешь вынести обработчики пакетов в отдельные потоки, но в этом случае порядок получения и отправки пакетов будет нарушен. Например, ядро отправляет на клиент пакет чанка и пакет спауна сущности в этом чанке. У тебя стоит какой-то длительный обработчик на пакет чанка. В итоге на клиент сначала прилетает пакет сущности, а уже только потом пакет чанка. В итоге на клиенте такая сущность больше и не отобразится, потому что для её "спауна" на клиенте обязательно должен быть загружен чанк.

Поэтому я практически уверен, что в режиме асинхронной обработки пакетов в ProtocolLib'е теряется возможность модифицировать и отменять пакеты. Да, их по-прежнему можно будет читать, но отсутствие чёткого порядка отправки всё ещё может стать проблемой, потому что логика работы обработчика тоже может зависеть от порядка.
Скорее всего, именно по этой причине асинхронный режим в ProtocolLib'е и не включён по-умолчанию: проблем от него может быть больше, чем пользы.

В теории можно попробовать вынести в асинхрон лишь некоторые типы пакетов, которые никак не влияют на порядок отправки и сами от него не зависят. Например, пакеты чата от клиента на сервер и в обратную сторону. По-моему, для них даже в самом Paper'е отдельная очередь: там боссбары и что-то ещё
Я так подумал, Я сделаю отдельны ивент асинхронны, в котором можно будет лишь получить данные пакета без возможности его отмены или редактирования, временно пойдет
 
Да, Paper складирует все пакеты в очередь кроме нескольких видов. Для всех остальных важен порядок.

upload_2023-2-18_13-28-38.png

upload_2023-2-18_13-28-59.png
 

Поделиться этой страницей

Назад
Верх