В чем разница между состоянием сохранения ChannelHandler в полях экземпляра и состоянием, использующим атрибуты? - PullRequest
0 голосов
/ 26 июня 2019

У меня есть реализация ChannelHandler, которая в настоящее время устанавливает поле экземпляра при получении сообщения HttpRequest, и использует это поле при получении сообщения HttpContent, а null выводит поле, когда LastHttpContent сообщение получено.Следовательно, класс реализации ChannelHandler не помечен @Sharable.

Что бы произошло, если бы я поместил это состояние в атрибут вместо поля экземпляра?Есть ли существенная разница?Я предполагаю, что это все еще не позволило бы моей реализации ChannelHandler быть разделяемой?

(Используя Netty 4.1.36.)

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Используйте поле экземпляра над атрибутом, если к состоянию будет доступ только из того же ChannelHandler. Если вам нужно установить состояние в одном обработчике, но доступ в других, то атрибут подходит.

0 голосов
/ 26 июня 2019

Да.Пока ваш обработчик не содержит состояния, вы можете пометить его @Sharable и создать только один его экземпляр.В свою очередь, ваш ChannelInitializer может добавлять этот экземпляр к каждому новому Channel вместо создания нового экземпляра для каждого соединения.

...