Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Edson Hostins

Sistema de Chat, saber se o usuário está online e atualizar novas msgs

Recommended Posts

Bom dia a todos...

 

Estou com uma duvida, ela não é bem de sintaxe de programação.

É o seguinte... estou quase terminando um sistema de chat, e preciso fazer duas ações constantes.

 

1º saber se o usuário está online

Para isso, a cada 5 segundos eu rodo um ajax que atualiza um campo datetime.

Pego a data atual-o valor deste campo, se for maior que 15 segundos, coloco ele como off

 

2º saber se tem msgs novas.

A cada 2 segundos rodo um ajax, que verifica isso

 

Minha duvida é... tenho que ficar rodando esses ajax, a cada tantos segundos pra conseguir estas novas informações?

Não existe outra forma...

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe sim, chama-se: websockets

 

Quanto a esses ajax "a cada x segundos", vc está atacando DDoS teu próprio servidor.

Péssima performance e péssima idéia para deployar em produção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse projeto é muito bom:

 

http://socket.io

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se vc está com PHP, então em vez de vc usar NodeJS vc precisa achar uma implementação de socket em PHP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não cara.. não é "só isso".

Compartilhar este post


Link para o post
Compartilhar em outros sites

To com o sistema "pronto", rodando tudo em ajax etc... como citei acima

Mas realmente não consegui "ver de cima" toda essa "ideia" de websockets

Instalei o node.js, fiz ele rodar... mas pelo que entendi tenho que executar ele, e deixar rodando igual um apache da vida...

 

Essas coisas me confundem um pouco

 

Poderia ser generoso, e compartilhar algumas informações uteis para quem está começando nisso ? ^^

Vc acredita que a mudança no meu código vai precisar ser ENORME.... ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, re-escrever toda a aplicação

 

nodejs é uma plataforma, um servidor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Wiliam boa tarde

 

Seguinte.... não reescrevi o codigo todo... simplesmente não consegui me entender com websockets

 

Fiz o chat com requisições ajax, e após 40 pessoas acessarem ao mesmo tempo

A memoria do meu servidor vai enchendo.. enchendo.. até q "meio que trava", e recomeça tudo.... acessando normalmente...

Enfim, terias alguma dica, além de websockets, para minimizar o impacto no servidor ?

 

vlwww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nops, a melhor opção é sim realmente websockets.

E NodeJS é a melhor opção para isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

considerando que já fiz todas possiveis buscas no google pra aprender algo sobre o node, e até já fiz uns scripts simples rodarem...

tens um link pra começar a usar ele com php/banco ?
Um tutorial que vc viu alguma vez, etc etc

Só falta ver os foruns russos kkk

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hum.. vc não vai usar node com php. =)

Ou vc usa node ou usa php + apache.

 

NodeJS é uma plataforma que possui a sintaxe da linguagem javascript.

Vc pode conectar o NodeJS em qualquer banco de dados que vc queira.

 

 

Outra alternativa é procurar uma implementação de socket para php, como:

http://socketo.me

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha só....

Olhando este exemplo... http://codeforgeek.com/2015/01/nodejs-mysql-tutorial/

Consegui fazer o node rodar com meu banco mysql....
Via url http://localhost:3000/ ele retorna o conteúdo em formato json do meu banco, SHOW

Ai vem outra duvida....

"Basicamente", agora posso criar uma rotina que lê a url acima, e mostra o resultado na tela pro usuário, formatadinho etc etc

Ai, via js, na minha pagina, a cada 1 segundo posso ler esta url, sem "pesar" o servidor...

Tá correta a logica ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está errada.

 

Se você continuar com isso de "a cada 1 segundo" vai pesar igual no servidor.

 

Agora você tem que ir e implementar o socket.io. A idéia do socket é te responder algo do servidor, apenas quando tiver algo para ser respondido. E não ficar perguntando todo segundo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

William....
Consegui "implementar" o socket.io....

Estou rodando exatamente este codigo aqui...

http://markshust.com/2013/11/07/creating-nodejs-server-client-socket-io-mysql

 

Em computadores diferentes, ao inserir uma nova nota (clicando em Create a new note)
Ambos navegadores são atualizados, ou seja é o que preciso

Mas uma coisa tá me deixando confuso... quando adiciono um registro direto no banco, ele não é apresentado na tela...

 

Na real, cheguei a deletar tudo do banco, e mesmo assim ele ainda mostra registros que não existem mais na tela... como um cache

 

vlw as dicas fera

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, o socket não lê o banco. Se vc quer trabalhar "inserindo" no banco, então o Firebase talvez seja uma alternativa, apesar de achar que vc está apenas confundindo conceitos.

 

O que vc deveria fazer é inserir no banco pelo socket e faça ele te devolver uma mensagem, do que foi inserido. Ele não fica "lendo o banco" para saber se alterou ou não, por isso vc não pode inserir diretamente lá.

 

Não é "cache", é apenas o estático da tela.

E de novo, vc não pode alterar o banco arbitrariamente direto nele, vc precisa de um processo que passe pela mensageria do socket.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exato. polling é ruim.

 

Fica com websocket.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.