Сохранение состояния на канале Netty - PullRequest
2 голосов
/ 04 декабря 2011

Есть ли способ сохранить состояние на канале. Я пишу чат-сервер и хочу сохранить информацию о пользователе, которому принадлежит канал. Я думал, что, возможно, Channel предоставит метод для хранения объекта пользователя, но я его не вижу. Есть ли способ сделать это без необходимости что-то вроде карты?

1 Ответ

6 голосов
/ 04 декабря 2011

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);
...