Contador de usuários online

3 respostas
M

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.

3 Respostas

Focao

tem pronto

M

Focão:
tem pronto

http://www.fastonlineusers.com

acho que me espressei mal
sao os usuarios logados.
entao todas as sessoes abertas de usuarios comuns. nao contam os administradores.

M

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(); }

Criado 27 de janeiro de 2009
Ultima resposta 27 de jan. de 2009
Respostas 3
Participantes 2