【发布时间】:2017-01-08 15:35:24
【问题描述】:
我想知道如何根据他们的唯一 ID 和 ID 会话映射连接的用户,以便当该 ID 的会话超过 3 个时,首先连接的用户会从哈希图中删除,依此类推.
例子:
UserID:3 Session:1980002
UserID:3 Session:2841111
UserID:3 Session:84848
UserID 已经包含 3 个活动会话,最旧的会话被删除并调用 KillSession,让位于新会话。
UserID:3 Session:2841111
UserID:3 Session:84848
UserID:3 Session:4848880
代码:
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是用户在数据库中的id,User_Session是wowza中为每个连接生成的唯一会话,这个会话不具有相等的值,即如果同一个Client_ID连接了多次,那每个会话的值都会有所不同。
也就是说,基本上我的难点就是挂载hashmap,我该怎么做呢?
【问题讨论】:
-
我不明白。用户 ID 是您地图的键(
HashMap还是其他类型)?如果是这样,我建议将ArrayDeque<Session>作为地图的值。如果ArrayDeque的大小已经为 3,则取出第一个会话并将其终止,然后在末尾添加新会话。您可以将Queue<Session>用于映射值类型,但ArrayDeque<Session>用于实际实例。 -
HashMap<String, String>或HashMap<Integer, Integer>无法从一个用户 ID 映射到三个会话 ID。它只能保存每个键一次,并且该键只有一个值。
标签: java hashmap limit wowza linkedhashmap