Halten Sie den Zustand auf einem Netty -Kanal
-
28-10-2019 - |
Frage
Gibt es eine Möglichkeit, den Zustand auf einem Kanal zu halten? Ich schreibe einen Chat -Server und möchte Informationen über den Benutzer behalten, zu dem ein Kanal gehört. Ich dachte, Channel würde eine Methode zum Speichern eines Benutzerobjekts bieten, aber ich kann keine sehen. Gibt es eine Möglichkeit, dies zu tun, ohne so etwas wie eine Karte zu brauchen?
Lösung
1) Sie können die Statusinformationen wie unten im ChannelHandlerContext festlegen und später verwenden.
channelHandlerContext.setAttachment(yourObj);
Object yourObj2 = channelHandlerContext.getAttachment();
2) Erstellen Sie dort einen lokalen und staatlichen State -Sender (Channel Local ist wie ein lokaler Thread zu einem bestimmten Kanal).
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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow