Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Avatar do usuário
ADMIN
ADMIN
Tópico Autor
Mensagens: 17666
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Long polling no banco de dados MySQL Tutorial

24-02-2016 06:47

Nesse post você vai ver como receber um aviso toda vez que houver um novo registro ou cadastro no banco de dados.
Você pode usar o mesmo método para atualização ou exclusão no banco de dados também.

O long polling pode ser usado para recarregar ou puxar dados de outro arquivo infinitamente, enquanto a página que tem a função estiver aberta.

Por exemplo, vamos imaginar um chat de suporte.
Quando um cliente entrar no chat, seria ideal ter um aviso na tela do administrador que há uma nova pessoa aguardando o suporte.

No exemplo desse post vou usar a seguinte situação:

Vamos supor que eu tenha um banco de dados MySQL e quando alguém se cadastrar eu desejo receber uma atualização na minha tela de administrador.

Como isso poderia ser feito?

Primeiramente vamos ver o seguinte exemplo abaixo.
Esse exemplo é um script em jQuery que faz requisições a cada 30 segundos a um arquivo chamado base.php.

<script src="jquery.js"></script> <script> $(function() { var atualiza = function() { jQuery.ajax({ type: "POST", url: "base.php", dataType: "html", data: "", // enviado com sucesso success: function(response){ jQuery("#retorno").html("("+response+") novo(s) cadastro"); if(response!="" && !="0") { document.title="("+response+") novo(s) cadastro(s)"; } else { document.title="Sistema.."; } }, // quando houver erro error: function(){ alert("Ocorreu um erro durante a requisição"); } }); // jQuery.ajax } // atualiza // atualização a cada 30 segundos setInterval(function() { atualiza(); }, 30000); })(); </script> <div id="retorno"></div>

base.php

10

Ao testar o código você vai observar que ao carregar o documento pela primeira vez após 30 segundos ele vai fazer o seguinte:

- Mostrar na barra de títulos: (n) novo(s) cadastro(s)
- Mostrar em uma div: (n) novo(s) cadastro(s)

O que pode ser feito para o administrador saber constantemente se há novos registros no banco dados?

Basicamente seria usar o arquivo base.php para uma consulta ao banco de dados, e retornar "echo" o número de linhas no banco de dados, de acordo com um filtro, tipo:

..WHERE status='1' // 1 = novo usuário

Quando não houver novos registros o echo deve ficar vazio.

Até ai já seria cumprido o objetivo, de exibir um aviso cada vez que houver um novo registro, atualização ou exclusão no banco de dados.

O problema desse método são as requisições infinitas ao banco de dados MySQL.

Qual a ideia para solucionar esse problema de requisições infinitas ao banco de dados?

A ideia é que ao invés do jQuery puxar o arquivo com a consulta do banco de dados, puxar um arquivo .html com o número total de linhas que foram afetadas na consulta ao banco de dados.

Como isso pode ser feito?

A cada registro no banco de dados por exemplo, podemos atualizar o conteúdo de um arquivo .html com o número total de linhas da consulta.
A cada registro no banco de dados, logo após do INSERT ter o seguinte script:

<?php $a = "conta.html"; // arquivo que vai receber o valor da consulta $sql = "SELECT * FROM .."; // CONSULTA $query = $conecta->query($sql); // RODA A CONSULTA $linhas = $query->num_rows; $v = $linhas; // valor da consulta $arquivo = fopen($a,'w+'); fwrite($arquivo,$v); fclose($arquivo); ?>

Como mostrado acima, $linhas vai armazenar o total de linhas da consulta, de acordo com o critério que definirmos na query.
Sempre que houver novo registro o arquivo chamado conta.html vai receber o número total de linhas da consulta.
Assim, o administrador com a página aberta vai fazer requisições infinitas ao arquivo conta.html ao invés de ficar consultando o banco de dados várias vezes.

No script da requisição jQuery ao invés de chamar o arquivo base.php vamos chamar conta.html

url: "base.php",
0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado