Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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...
Muito bom saber disso...
Programo a tanto tempo e nem fazia ideia...
Vou dar uma pesquisada... e aproveitando...
Tens um exemplo "basico" de como seria a programação disso ?
Esse projeto é muito bom:
No caso eu uso o wamp...
preciso fazer ajustes no ini certo ?
to achando documentação etc etc... mas tá meio embaçado tudo ainda :/
Se vc está com PHP, então em vez de vc usar NodeJS vc precisa achar uma implementação de socket em PHP.
eu to usando o wamp.... então... para isso funcionar, eu preciso adicionar um "programa extra"
nada haver com descomentar a extenção "extension=php_sockets.dll" ?
Não cara.. não é "só isso".
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.... ?
sim, re-escrever toda a aplicação
nodejs é uma plataforma, um servidor.
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
Nops, a melhor opção é sim realmente websockets.
E NodeJS é a melhor opção para isso.
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
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:
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 ?
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.
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
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.
William...
O tutorial deste cara: http://www.gianlucaguarini.com/blog/push-notification-server-streaming-on-a-mysql-database/
Fica fazendo POLLING a cada 3 segundos...
Então devo concluir que a logica dele não está certa?
Não é uma boa ideia seguir a logica dele ?
Exato. polling é ruim.
Fica com websocket.
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.