Verificar usuarios online

Olá!!
Estou trabalhando em um projeto pessoal e queria implementar um sistema simples de chat, mas para isso o usuario deve saber quem está online para iniciar uma conversa.
Eu tive a seguinte ideia: quando o usuario entrar na conta dele eu mudaria o status no banco de dados para identificar que ele conectou no sistema, mas o problema é quando ele fechar o navegador, como o sistema saberá que aquele usuario não está disponivel para iniciar uma conversa. Então pensei em usar cookies, colocaria um tempo X e no caso do navegador for fechado o cookie iria expirar porem se eu optar por cookies mesmo com o usuario logado o cookie iria expirar e ele seria desconectado do sistema.
Se alguem tiver alguma outra ideia, por favor me ajudem.
Obrigado. :slight_smile:

O jeito que o pessoal fazia antigamente era implementando um ping do cliente pro servidor. Então de 1 em 1 min o navegador faz um request pra avisar que ainda ta vivo. Se o request nao chega, o servidor sabe que aquele cara caiu. A ideia é guardar no banco o timestamp da ultima vez que o cara pingou, e ai considerar online só quem foi no ultimo minuto.

Uma ideia mais moderna, ja que é um projeto pessoal, é usar WebSockets. Acho que vale estudar. Com WebSockets o cliente fica com uma conexao aberta pra comunicacao real-time. Bem legal pra chats. E vc sabe se ele caiu quando a conexao cair.

2 curtidas

Cara aqui na empresa tivemos uma situação parecida. Vou lhe descrever o que fizemos em cada e você ve qual se adapta mais ao seu caso:

  • Criamos um chat online da maneira que você citou, porém colocamos um CRON a rodar a cada minuto para verificar o status do usuário e caso o usuário não estivesse mais conectado ele setava o status do usuário para offline. Em menos de um mês de uso o sistema ficou extremamente lento devido a quantidade de usuários conversando e alterando status (muitas requisições sql).

  • A partir de então decidimos utilizar node.js com websockets como o sergio citou acima. Foi uma novidade para nós, e como novidade tivemos dificuldade e demora para para implementar e testar. Porém ao final de tudo o chat não teve problemas de lentidão e está rodando até hoje, pois as requisições ficaram absurdamente mais rápidas.

  • Atualmente existe um outro projeto que estamos trabalhando que possui um chat online junto com videconferência que utiliza a biblioteca RTCMultiConnection.js através dela é possível enviar e receber mensagens utilizando os recursos do navegador. Não é tão robusto quanto o noje mas evita que seja preciso instalar recursos no servidor (mais recomendado para quem nao tem acesso root).

Pesquise mais sobre eles e veja qual se adapta mais a você.
Abraço.

1 curtida