Ir para conteúdo

Arquivado

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

Philippe Luis

Long Polling abre apenas a primeira coneção

Recommended Posts

Galera tenho um long Polling defeituoso.

 

ele funciona perfeitamente da primeira vez, apos disso não abre mais a conexão de 20 em 20 segundos como eu quero.

 

<?php
$timeStart = time();

$conn = new PDO('mysql:host=localhost;dbname=notificacoes', 'root', '');

if(isset($_POST['timestamp'])){
	$timeStamp = $_POST['timestamp'];
}else{
	$sql = "SELECT NOW() as now";
	$sth = $conn->prepare($sql);
	$sth->execute();
	$row = $sth->fetchObject();

	$timeStamp = $row->now;
	echo $timeStamp;
}

$sql = "SELECT *FROM notific WHERE data > '$timeStamp'";
$sth1 = $conn->prepare($sql);

$newData = false;
$notific = array();

while (!$newData && (time() - $timeStart) < 20) {
	$sth1->execute();
	while($dados = $sth1->fetch(PDO::FETCH_ASSOC)){
		$notific[] = $dados;
		$newData = true;
	}
	usleep(500000);
}

$sql = "SELECT NOW() as now";
	$sth = $conn->prepare($sql);
	$sth->execute();
	$row = $sth->fetchObject();

	$timeStamp = $row->now;

	$data = array('notificaoes'=>$notific, 'timestamp'=>$timeStamp);
	echo json_encode($data);

 

JS

 

<script
  src="https://code.jquery.com/jquery-3.2.1.min.js"
  integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
  crossorigin="anonymous"></script>
<script type="text/javascript">
	$(function(){
		pegaNotificacoes();
	});
	function pegaNotificacoes(timestamp){
		var data = {};
		if(typeof timestamp != 'undefined'){
			data.timestamp = timestamp;
		}
		$.post('longPollin.php', data, function(res){
			
				$('#resultados').append(res.notificacoes[0].nomeLoja+'-------'+res.timestamp+'<br/>');
			pegaNotificacoes(res.timestamp);
		}, 'json');
	}
</script>
<div id="resultados"></div>

 

AJuda por favor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por manoaj
      Pessoal estou usando o long polling pra me retornar notificacoes em tempo real, esta tudo funcionando normalmente, estou inserindo os dados no db e o codigo me retorna as novas notificacoes, mas se eu der um refresh na pagina ela fica em um loop infinito tentando atualizar e gerando esse erro no meu php MySQL server has gone away.
      Como resolvo e o que siguinifica esse erro dentro desse contexto?
    • Por Insanity
      Estou com um sistema que tem algumas coisas que se usa long polling, isso atrapalha tudo, qualquer botão que você clica (que faz uma requisição Ajax) vai demorar porque tem o long polling executando. O Ajax por padrão cria uma fila de requisições, quero que as requisições sejam executadas ao mesmo tempo, em paralelo. Por exemplo, estou eu mexendo no site, enquanto isso, eu mantenho uma requisição Ajax que segura o servidor por 20seg, se eu clico em qualquer coisa ou até mesmo vou para outra página, tenho que esperar essa requisição de 20seg acabar. Quero que dê para fazer diversas requisições ao mesmo tempo, igual o facebook. Alguém conhece alguma técnica? Alguma referência? Ouvi falar do when, mas não é isso que preciso.
×

Informação importante

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