Netty学习笔记15 Netty Attribute使用

Posted 编程圈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Netty学习笔记15 Netty Attribute使用相关的知识,希望对你有一定的参考价值。

Attribute<?> 用来在channel上记录数据。

操作

写示例

AttributeKey<byte[]> srcdataAttrKey = AttributeKey.valueOf("srcdata");
byte[] mydata=new byte[msg.readableBytes()];
Attribute<byte[]> srcdataAttr = ctx.channel().attr(CloudConstants.srcdataAttrKey);
srcdataAttr.set(mydata);

读示例

AttributeKey<String> nameAttrKey = AttributeKey.valueOf("nameattr");

Attribute<String> attr = ctx.channel().attr(nameAttrKey);
String name= attr.get();

通过attr查找channel

import io.netty.channel.Channel;
import io.netty.channel.group.ChannelMatcher;
import io.netty.util.Attribute;

public class MatcherByName implements ChannelMatcher
private String name;

public MatcherByName(String name)
this.name = name;

/**
* 查找某个channel,找自己所在channel,不是找peer
*
* */
@Override
public boolean matches(Channel ch)

Attribute<String> nameAttr= ch.attr(ChannelConstants.ChannelAttribute);
String name = nameAttr.get();
if(name==null)return false;

if(this.name.equals(name))
return true;
else
return false;



/**
* 通过matcher找channel list
* @param matcher
* @return
*/
public static List<Channel> getChannelsFromMatcher(ChannelMatcher matcher)
Object[] channels =NettyService.allChannels.toArray();
List<Channel> list = new ArrayList<Channel>();
Channel channel = null;
for(Object ch : channels)
if(matcher.matches((Channel)ch))
channel = (Channel)ch;
list.add(channel);


return list;


public static Channel getChannelByName(String name)
MatcherByName matcher=new MatcherByName(name);
List<Channel> list= getChannelsFromMatcher(matcher);
if(list!=null && list.size()>0)
return list.get(0);
else
return null;


以上是关于Netty学习笔记15 Netty Attribute使用的主要内容,如果未能解决你的问题,请参考以下文章

Netty学习笔记:Netty核心模块组件

Netty学习笔记四:Echo服务和Netty项目的搭建

Netty学习笔记

Netty学习2(学习笔记)

Netty学习4(学习笔记)

Netty笔记2-Netty学习之NIO基础