컨테이너는 각각의 연결을 위한 endpoint 클래스를 생성하기 때문에, 클라이언트 상태 정보를 저장할 필요가 있다. Session.getUserProperties
메소드는 유저 특성을 저장할 수 있는 map을 제공한다.
@ServerEndpoint("/delayedecho")
public class DelayedEchoEndpoint {
@OnOpen
public void open(Session session) {
session.getUserProperties().put("previousMsg", " ");
}
@OnMessage
public void message(Session session, String msg) {
String prev = (String) session.getUserProperties()
.get("previousMsg");
session.getUserProperties().put("previousMsg", msg);
try {
session.getBasicRemote().sendText(prev);
} catch (IOException e) { ... }
}
}
연결 된 클라이언트들에 대한 정보를 저장하기 위해서 class variables (= static variables)를 사용할 수 있지만, 그 정보에 안전하게 접근해야 할 책임이 있다.
참고 : https://docs.oracle.com/javaee/7/tutorial/websocket006.htm