2
有沒有辦法保持頻道的狀態。我正在寫一個聊天服務器,我想保留一個頻道所屬用戶的信息。我在想,Channel可能會提供一種方法來存儲用戶對象,但我看不到一個。有沒有辦法做到這一點,而不需要像地圖一樣?在Netty頻道上保持狀態
有沒有辦法保持頻道的狀態。我正在寫一個聊天服務器,我想保留一個頻道所屬用戶的信息。我在想,Channel可能會提供一種方法來存儲用戶對象,但我看不到一個。有沒有辦法做到這一點,而不需要像地圖一樣?在Netty頻道上保持狀態
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);
在Netty的4.0 ChannelHandlerContext不具有setAttachment()方法。所以我猜這些信息只是過時了? – Michael
@Michael'setAttachment()'不再使用,'attr()'是你正在尋找的方法。請參閱http://netty.io/4.0/api/io/netty/util/AttributeMap.html –