고유 ID와 ID 세션을 기반으로 연결하는 사용자를 매핑 할 수있는 방법을 알고 싶습니다. 그 ID에 대해 3 개 이상의 세션이있을 때 먼저 연결된 사용자가 해시 맵 등에서 제거됩니다.삽입 순서에 따라 HashMap 값을 추가 및 제거하는 방법은 무엇입니까?
예 :
UserID:3 Session:1980002
UserID:3 Session:2841111
UserID:3 Session:84848
아이디에 이미 3 개 활성 세션을 포함, 가장 오래된이 제거되고 KillSession 새에 방법을 제공, 호출됩니다.
UserID:3 Session:2841111
UserID:3 Session:84848
UserID:3 Session:4848880
코드 :는 User_Session가 wowza의 고유 한 세션은 각 연결에 대해 생성 된 CLIENT_ID가 데이터베이스에서 사용자의 ID입니다
public void onHTTPCupertinoStreamingSessionCreate(HTTPStreamerSessionCupertino httpSession) {
String User_Session = httpSession.getSessionId();
String Client_ID = httpSession.getProperties().getPropertyStr("sql_client_id");
/* Verifies that there are already 3 active sessions and removes the oldest,
since the limit of simultaneous sessions is 3 for each user,
and add to hashmap, Client_ID and User_Session */
}
public void onHTTPCupertinoStreamingSessionDestroy(IHTTPStreamerSession httpSession) {
String User_Session = httpSession.getSessionId();
//remove from hashmap, Client_ID based on session User_Session
}
public void KillSession(int SessionId){
IApplicationInstance Instance = applicationInstance;
IHTTPStreamerSession sessions = Instance.getHTTPStreamerSessions().get(SessionId);
sessions.rejectSession();
//remove from hashmap, Client_ID based on session User_Session
}
이며,이 세션은, 같은 값을 가지고하지 않습니다 즉, 동일한 Client_ID가 두 번 이상 연결되면 해당 값은 각 세션마다 다릅니다.
기본적으로 내 어려움은 해시 맵을 마운트하는 것입니다. 어떻게해야합니까?
나는 이해할 수 없다. 사용자 아이디가 맵의 키 ('HashMap'이든 다른 어떤 타입이든)입니까? 그렇다면, 나는지도의 값으로'ArrayDeque'을 제안한다. 'ArrayDeque'가 이미 크기가 3이라면, 첫 번째 세션을 꺼내서 죽이고 마지막에 새로운 세션을 추가하십시오. map 값 타입으로는'Queue '을 사용할 수 있지만, 실제 인스턴스에는'ArrayDeque '를 사용하면된다. –
'HashMap'또는'HashMap '는 한 사용자 ID를 세 개의 세션 ID로 매핑 할 수 없습니다. 각 키는 해당 키에 대해 단 하나의 값만 가질 수 있습니다. –