2011-12-04 71 views
2

有沒有辦法保持頻道的狀態。我正在寫一個聊天服務器,我想保留一個頻道所屬用戶的信息。我在想,Channel可能會提供一種方法來存儲用戶對象,但我看不到一個。有沒有辦法做到這一點,而不需要像地圖一樣?在Netty頻道上保持狀態

回答

6

1)您可以在channelHandlerContext中設置狀態信息,如下所示,稍後使用。

channelHandlerContext.setAttachment(yourObj); 

    Object yourObj2 = channelHandlerContext.getAttachment(); 

2)創建的信道的本地和存儲狀態信息存在(通道本地就像一個線程本地到特定的信道)

import org.jboss.netty.channel.ChannelLocal; 

import java.util.Map; 

public class UserInfoHolder { 
    public final static ChannelLocal<Map<String, String>> USER_INFO = new  ChannelLocal<Map<String, String>>(); 
} 


//if you have the channel reference, you can store and retrieve information like this 
Map<String,String> userMap = .... 

//store 
UserInfoHolder.USER_INFO.set(channel, userMap); 

//retrive 
Map<String,String> userMap2 = UserInfoHolder.USER_INFO.get(channel); 
+0

在Netty的4.0 ChannelHandlerContext不具有setAttachment()方法。所以我猜這些信息只是過時了? – Michael

+1

@Michael'setAttachment()'不再使用,'attr()'是你正在尋找的方法。請參閱http://netty.io/4.0/api/io/netty/util/AttributeMap.html –