example - websocket tomcat java
Encuentre la sesiĆ³n de websocket por id en Java EE 7 (1)
Puedes hacer algo como:
Map<String, Session> map = new HashMap<>();
static Map<String, Session> peers = Collections.synchronizedMap(map);
@OnOpen
public void onOpen(Session session) {
peers.add(session.getId(), session);
}
@OnClose
public void onClose(Session session) {
peers.remove(session.getId());
}
private static Session findOtherSessionById(Session user, String id) {
if (peers.containsKey(user.getId()) {
return peers.get(user.getId());
}
}
He leído la documentación de Java EE y para mí no está nada claro. Según API, la única forma de encontrar otra sesión es un código como este: (suponiendo que tengamos el identificador de otra sesión):
import javax.websocket.Session;
...
private static Session findOtherSessionById(Session user, String id) {
for (Session session : user.getOpenSessions()) {
if (id.equals(session.getId())) {
return session;
}
}
return null;
}
Pero cuando tenemos miles de usuarios, este código es un cuello de botella de rendimiento.
Entonces, ¿hay alguna forma de obtener Session by id rápidamente sin usar el propio ConcurrentHashMap para esto? O tal vez algún servidor de aplicaciones tiene una función no documentada para esto (para mí Wildfly sería genial)?