Mantenere lo stato su un canale netty
-
28-10-2019 - |
Domanda
C'è un modo per mantenere lo stato su un canale. Sto scrivendo un server di chat e voglio conservare informazioni sull'utente a cui appartiene un canale. Pensavo che forse Channel avrebbe fornito un metodo per archiviare un oggetto utente, ma non riesco a vederne uno. C'è un modo per farlo senza aver bisogno di qualcosa come una mappa?
Soluzione
1) È possibile impostare le informazioni sullo stato nel canalendlerContext, come sotto, e usarle in seguito.
channelHandlerContext.setAttachment(yourObj);
Object yourObj2 = channelHandlerContext.getAttachment();
2) Crea un canale locale e archivia le informazioni sullo stato lì (il canale locale è come un thread locale a un canale specifico)
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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow