preciso desenvolver uma aplicacao que mostre nas paginas, no cabecalho, o numero de usuarios online naquele momento, como este forum faz.
eu queria saber qual a melhor forma de fazer isso. acho que seria colocar na sessao e ser atualizado a cada requisicao, mas dai perde o sentido ser sessao, com escopo de requisicao fica melhor?
e sobre o metodo. tem um bean chamado usuario. mas contar os usuarios online nao acho que seja de responsabilidade dele, embore ele pode me retornar todos os usuarios a partir de um criterio de pesquisa como “somente online”. mas retornar uma colecao inteira so pra usar o count fica complicado, ne?
a aplicacao tambem pode listar estes usuarios. dai voces acham que eh melhor manter um bean de sessao com uma colecao (numa variavel estatica, por exemplo) com todos os usuarios online e que fosse atualizado de x em x minutos pelo servidor? dai nao precisaria buscar no banco a cada hora que alguem pede pra lista-lo.
o que voces sugerem?
agradeco.
Contador de usuários online
3 Respostas
tem pronto
tem pronto
acho que me espressei mal
sao os usuarios logados.
entao todas as sessoes abertas de usuarios comuns. nao contam os administradores.
o que eh melhor (tentei fazer de uma forma resumida e ficou bem grosseira pelo jeito)
a. session.setAttribute("contador", userBean.getUsuariosOnline()); // retorna um int
b. session.setAttribute("contador", userBean.getUsuariosOnline().size()); // retorna um array com todos os usuários online
c. request.setAttribute("contador", userBean.getUsuariosOnline());
d. request.setAttribute("contador", userBean.getUsuariosOnline().size());
e no bean? (claro que o rs estaria numa dao, só pra simplificar)
a.
private static ArrayList usuariosOnline = new ArrayList(); // que eh atualizado por outros metodos que adicionam ou removem, os login() e logout()
private int getUsuariosOnline() {
return usuariosOnline.size();
}b.
private int getUsuariosOnline() {
... // select count(*) as contador from usuarios where status = 'online'
int contador = rs.getInt("contador");
...
return contador;
}c.
private ArrayList getUsuariosOnline() {
ArrayList todos = new ArrayList();
... // select * from usuarios where status = 'online'
while (rs.next()) {
...
todos.add(usuario);
}
...
return todos;
}d.
private int getUsuariosOnline() {
ArrayList todos = new ArrayList();
... // select * from usuarios where status = 'online'
while (rs.next()) {
...
todos.add(usuario);
}
...
return todos.size();
}