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基础