Использование Netty ChannelLocal

JavaDocs для Netty объясняет, что ChannelLocal похож на ThreadLocal, однако у меня есть несколько вопросов по поводу его использования. ThreadLocal — это статический класс со статическими методами, которые обращаются к объектам, специфичным для экземпляра. ChannelLocal не является статическим, имеет статическую внутреннюю карту или статические методы. В документации нет примера доступа к ChannelLocal или размещения объекта в ChannelLocal, поэтому я надеялся, что кто-нибудь может дать мне некоторое представление о его использовании.

Спасибо!


person Ryan Shelley    schedule 09.12.2011    source источник


Ответы (1)


ChannelLocal используется для назначения некоторых данных каналу.

Вот пример:

// Declare
public static final ChannelLocal<Integer> data = new ChannelLocal<Integer>();

// Set
data.set(e.getChannel(), 1);

// Get
int a = data.get(e.getChannel());

Вот пара примеров из реальной жизни:

person Veebs    schedule 10.12.2011
comment
Интересно. Хорошо, спасибо за примеры использования, я знаю, куда двигаться дальше! - person Ryan Shelley; 13.12.2011
comment
Мне любопытно, почему внутренняя карта для ChannelLocal не статична: ` private final ConcurrentMap‹Channel, T› map = new ConcurrentIdentityWeakKeyHashMap‹Channel, T›(); ` Если я использую ChannelLocal в двух разных классах, мне нужно будет перерегистрировать мой объект ChannelLocal между этими классами. Было бы разумнее иметь внутреннюю статическую карту, поэтому, если я добавлю что-то в ChannelLocal для одного класса, я смогу получить тот же объект из другого класса, не передавая ChannelLocal. - person Ryan Shelley; 13.12.2011
comment
Сам не уверен. Вы можете задать вопрос на форуме разработчиков: groups.google.com/group/netty. Я знаю, что в последнем мастере netty (предстоящий выпуск netty 4.0) обсуждается обесценивание ChannelLocal и предоставление getAttachment/setAttachment на канале. github.com/netty/netty/issues/101 - person Veebs; 13.12.2011
comment
Примечание: внутри WeakKeyHashMap значение не должно ссылаться на ключ, иначе запись карты не будет удалена сборщиком мусора. - person Vincent Cantin; 26.03.2012
comment
В ChannelHandler javadoc также есть отличная глава для изучения. различные рекомендуемые способы управления информацией о состоянии с некоторыми примерами. - person cbliard; 10.04.2013
comment
@cbliard ChannelLocal был удален в netty 4.0, - person raffian; 23.12.2014