Pesquisar na Comunidade
Mostrando resultados para as tags ''long polling''.
Encontrado 2 registros
-
Olá galera. Essa é a primeira vez que estou escrevendo pois me deparei com algo complicado (pra mim pelo menos). Contextalizando: Estou fazendo um sistema para monitorar e gerenciar as lampadas da minha casa. O projeto consiste em servidor web Apache, PHP e comando direto para microcontrolador (Arduino em questao). Pois bem. Todas as conexoes e funcionamento estão perfeitos, mas me deparei com a necessidade de fazer uma atualizacao em tempo real. A minha aplicacao está dessa forma: index.php: contem as imagens das lampadas. Quando a lampada esta apagada, clico nela e então rodo 3 funcoes basicas: 1. Seto no banco de dados o valor 1 (ligada) para a lampada do ID correspondente; 2. Atualizado o arquivo data.txt com a tag <img src="on.jpg"> (long polling) 3. Mando pro arduino o codigo correspondente para ligar a lampada correspondente. lampada.php: contem as funcoes necessarias para os passos acima. O meu problema esta agora em realizar o Long Polling para atualizar a imagem da lampada na tela no exato momento em que o usuario clica na lampada. Achei uma funcao na internet e realmente funcinou, mas me deparei com estas necessidades: 1. Passar o ID da lampada para a funcao que esta no javascript/ajax para que ele corretamente pegue esta informação e atualize a lampada correta. 2. Realizar o long polling corretamente. Aqui vai o trecho do codigo: <script type="text/javascript" charset="utf-8"> var timestamp = null; function waitForMsg() { $.ajax({ type: "GET", url: "codlamp/getdata.php?timestamp=" + timestamp, async: true, cache: false, success: function (data) { var json = eval('(' + data + ')'); if (json['msg'] != "") { //alert( json['msg'] ); //Display message here $("#lampada4").empty(); $("#lampada4").append(json['msg'] + "<hr>").slideDown("slow"); } timestamp = json["timestamp"]; setTimeout("waitForMsg()", 1000); }, error: function (XMLHttpRequest, textStatus, errorThrown) { // alert("error: "+textStatus + " "+ errorThrown ); setTimeout("waitForMsg()", 1000); } }); } $(document).ready( function () { $('.jclock').jclock(); waitForMsg(); $("#lampada4").click(function () { $("#lampada4").load("lampada.php?num=4"); }); }); </script> No final desse arquivo, tenho as tags divs que possuem a imagem da lampada e que deve ser atualizada. Detalhe que são 15 lampadas e 15 tags. Portando preciso passar o ID para a funcao realizar suas consultas pelo id e retornar atualizacao da imagem que foi clicada. <body> <?php include 'inicial.php'; ?> <div></div> <div id="planta"></div> <div id="titulo">Planta Baixa - Marcus Vinicius</div> <div class="lampada" id="lampada1"><?php consultaEstadoLamp(1); ?><br /></div> <div class="lampada" id="lampada2"><?php consultaEstadoLamp(2); ?><br /></div> <div class="lampada" id="lampada3"><?php consultaEstadoLamp(3); ?><br /></div> <div class="lampada" id="lampada4"><?php consultaEstadoLamp(4); ?><br /></div> <div class="lampada" id="lampada5"><?php consultaEstadoLamp(5); ?><br /></div> <div class="lampada" id="lampada6"><?php consultaEstadoLamp(6); ?><br /></div> </body> O arquivo getdada.php é esse: <?php $filename= dirname(__FILE__)."/data4.txt"; $lastmodif = isset( $_GET['timestamp'])? $_GET['timestamp']: 0 ; $currentmodif=filemtime($filename); while ($currentmodif <= $lastmodif) { usleep(10000); clearstatcache(); $currentmodif =filemtime($filename); } $response = array(); $response['msg'] = file_get_contents($filename); $response['timestamp']= $currentmodif; echo json_encode($response); ?> A funcao ConsultaEstadoLampada() é irrelevante na duvida, mas para terem uma ideia do que estou fazendo vou colar aqui: function consultaEstadoLamp($num) { include 'conexao.php'; $query = 'SELECT estado, local FROM lampada WHERE lampada =' . $num; $result = mysqli_query($link, $query); while ($row = mysqli_fetch_array($result)) { $estado = $row['estado']; $local = $row['local']; } if ($estado == 1) { //deleta o arquivo data.txt unlink('codlamp/data' . $num . '.txt'); //cria um novo arquivo data.txt $fp = fopen('codlamp/data' . $num . '.txt', "w+"); //coloca dentro a atualizacao pois escrita no banco $escreve = fwrite($fp, '<img src="imagens/on.png" width="40" height="32">' . '<br/> ' . $local); //fecha conexao com arquivo fclose($fp); } else { //deleta o arquivo data.txt unlink('codlamp/data' . $num . '.txt'); //cria um novo arquivo data.txt $fp = fopen('codlamp/data' . $num . '.txt', "w+"); //coloca dentro a atualizacao pois escrita no banco $escreve = fwrite($fp, '<img src="imagens/off.png" width="40" height="32">' . '<br/> ' . $local); //fecha conexao com arquivo fclose($fp); } } Aguardo resposta!
-
Galera tenho o seguintes códigos... Porém quando abro a pagina em que o código começa a executar suas funções, se eu clicar em um link que saia da pagina, algo relacionado a isso, o site fica pensando como se fosse uma net lenta pra caramba, tipo de 5 a 10s pra sair da page, eu to local host ainda, e já da essa lentidão, tenho medo de quando o site ficar online essa lentidão aumentar muito. Por favor, que puder dar algum dica, vou ficar realmente agradecido, pra alguns pode ser algo simples, porém eu tenho pouco conhecimento ainda, mas quero melhorar :)..OBRIGADO! já postei em outro fórum, espero que alguém consiga me ajudar :). -----------------pagina principal, com ajax -------------------------- <head> <link href="../css/criapostagem.css" rel="stylesheet"> <?php if(isset($_GET['idpagegru'])){ if(isset($_SESSION['numticket'])){ if(isset($_SESSION['ticketrand'][$_SESSION['numticket']])){ if($_SESSION['idpagegru'][$_SESSION['numticket']]==$_GET['idpagegru']){ $ticket=rand(1,2000); $_SESSION['ticketrand'][$_SESSION['numticket']]=$ticket; }else{ $ticket=rand(1,2000); $_SESSION['numticket']=$_SESSION['numticket']+1; $_SESSION['ticketrand'][$_SESSION['numticket']]=$ticket; $_SESSION['idpagegru'][$_SESSION['numticket']]=$_GET['idpagegru']; } }else{ $ticket=rand(1,2000); $_SESSION['ticketrand'][$_SESSION['numticket']]=$ticket; $_SESSION['idpagegru'][$_SESSION['numticket']]=$_GET['idpagegru']; } }else{ $_SESSION['numticket']=0; $ticket=rand(1,2000); $_SESSION['ticketrand'][$_SESSION['numticket']]=$ticket; $_SESSION['idpagegru'][$_SESSION['numticket']]=$_GET['idpagegru']; } } for( $x =0, $max = count($_SESSION['idpagegru']); $x < $max; ++$x ) { if($_SESSION['idpagegru'][$x]==$_GET['idpagegru']){ $ticketreal=$_SESSION['ticketrand'][$x] ; }else{ } } ?> <script type="text/javascript" language="javascript" src="../js/jquery-2.1.1.js"></script> <script type="text/javascript"> var permicao = 1; //Variavel que indicara a permicao da funcao "buscar_auxiliar()" //Funcao que chamara o arquivo "buscar.php" para varrer o banco function buscar(binario){ var busca_ajax; //Verificao navegador if(window.XMLHttpRequest) { busca_ajax = new XMLHttpRequest(); } else if(window.ActiveXObject) { busca_ajax = new ActiveXObject("Microsoft.XMLHTTP"); } // Arquivo PHP juntamente com o valor digitado no campo, e a função "escape()" converte os caracteres especiais em hexadecimal iniciado por "%". var url = "consulta/busca_postagem.php?ticket=<?php echo $ticketreal?>&verifica=ok&grupo=<?php echo $grulogcodigo?>&pageativa=<?php echo $_GET['idpagegru']?>"; // Chamada do metodo open e envia os dados para o arquivo buscar.php. busca_ajax.open("Get", url, true); // Quando o objeto recebe o retorno, chamamos a seguinte função; busca_ajax.onreadystatechange = function(){ //Aguarda o ajax executar if(busca_ajax.readyState == 4 && busca_ajax.status == 200) { //Resposta retornada pelo "buscar.php" via "echo" var resposta = busca_ajax.responseText; //Verifica se e um conteudo vazio. if(resposta != "" && !(resposta.match(/^\s+$/))){ //Criamos uma "div" com o conteudo encontrado dentro e colocamos tudo dentro da tag "p". $("#postbase").html(resposta); $("#postbase").find("script").each(function(i) { eval($(this).text()); }); permicao = 1; //Coloca 1 para que a função "buscar_auxiliar()" consiga chamar novamente esta função ("buscar(binario)"). } else{ permicao = 1; //Caso algo de errado no "if" coloca a permicao para "1", permitindo outra busca nesta funcao ("buscar(binario)") chamada pela função "buscar_auxiliar()" } busca_ajax.send(null); //Limpa a variavel para que possa ser novamente criado na proxima execucao } } busca_ajax.send(null); //Limpa a variavel para que possa ser novamente criado na proxima execucao } //------------------------------------------------------------------------------------ function buscar_auxiliar(){ //Funcao auxiliar que serve para chamar a funcao "buscar(binario)", mas impedindo que a mesma seja chamada novamente antes de realizar o pedido de busca anterior. if(permicao != 0){ //Verifica se tem permicao para chamar a funcao "buscar(binario)" (para nao chamar a outra funcao antes que a mesma termine as buscas). permicao = 0; //Altera a variavel "permicao" para que este "if" não permita que a funcao "buscar(binario)" não seja chamada antes do tempo. buscar(0); //Chama a funcao "buscar(binario)". } } //------------------------------------------------------------------------------------ var bloqueio= 0; //Variavel usada dentro da funcao "busca_automatica()", para que o botao "busca_ajax automática" chame a funcao "busca_automatica()" apenas uma vez. if(bloqueio == 0){ //Verifica se a variavel esta com o valor original, evitando que o comando "window.setInterval" seja chamado mais de uma vez. window.setInterval("buscar_auxiliar()", 1000); //Funçao ativada automaticamente de tempo em tempo. bloqueio = 1; //Muda o valor da variavel, impedindo que o "if" deixe executar novamente o comando "window.setInterval". } </script> <script type="text/javascript" src="../tinymce/js/tinymce/tinymce.min.js"></script> <script> tinymce.init({ selector: "#criapostagem", theme: "modern", width: '100%', height: 100, max_height: 100, language : 'pt_br', menubar : false, plugins: "link emoticons textcolor autolink", target_list: [{title: 'Nova aba', value: '_blank'}], toolbar: "bold italic link image forecolor emoticons", }); </script> <script type="text/javascript" language="javascript"> $(function($) { // Quando o formulário for enviado, essa função é chamada $("#formpost").submit(function() { // Colocamos os valores de cada campo em uma váriavel para facilitar a manipulação var grulogcodigo = $("#grulogcodigo").val(); var criapostagem =tinyMCE.get('criapostagem').getContent(); var catpos = $("#catpos").val(); $.post('cadastro/procpostagem.php', {grulogcodigo: grulogcodigo, criapostagem: criapostagem, catpos: catpos }, function(resposta) { tinyMCE.activeEditor.setContent('<span></span>'); $("#catpos").val("9999"); $("#postok").html('Postagem efetuada!'); $("#postok").fadeOut(2000); }); }); }); </script> </head> <?php $buscacatpos =$linkbd->query("SELECT * FROM cat_postagem ORDER BY catposnome"); $buscacatpos->execute(); for ($i=0; $rowcatpos = $buscacatpos->fetch(); $i++) { $arrcatpos[$rowcatpos['catposcodigo']] = $rowcatpos['catposnome']; } ?> <section id="basecriapost"> <form action='javascript:func()' id="formpost" method='post' name='reenvia'> <input type="hidden" id="grulogcodigo" value="<?php echo $grulogcodigo ?>"> <ul id="textaareapost"><textarea id="criapostagem" name="criapostagem"> </textarea></ul> <ul id="opcareapost"> <li id="titcamp">Categoria</li> <li id="lislt"> <select name="catpos" id="catpos"> <option value="9999">Geral</option> <?php foreach ($arrcatpos as $codcatpos => $nomcatpos) { echo "<option value='{$codcatpos}'>{$nomcatpos}</option>"; }?> </select> <p id="infocatpos">Selecione a categoria da postagem</p> </li> <li id="libt"><input type="submit" id="btpost" name="enviapost" value="Postar"></li> </ul> </form> </section> <div id="postok"> </div> <div id="postbase"> </div> <?php session_write_close();?> ---------------------Pagina php que é chamada ----------------------------- <?php session_start(); /** * tempo de sleep do sistema * quanto maior o tempo, menos processamento é utilizado, * entretanto tem um maior o tempo de espera para a resposta **/ for( $x =0, $max = count($_SESSION['idpagegru']); $x < $max; ++$x ) { if($_SESSION['idpagegru'][$x]==$_GET['pageativa']){ if(isset($_SESSION['ticket'][$x])){ if($_SESSION['ticket'][$x]==$_GET['ticket']){ $sleepTime =rand(5,10); //segundos }else{ $sleepTime = 1; //segundos } }else{ $sleepTime = 1;//segundos } } } /** tempo de execução definido para o script **/ $executionTime = 100;//segundos /** caso não estiver em safe mode, pode realizar alterações no tempo de execução do script **/ if(!ini_get('safe_mode')) { /** verifica se o limite de tempo para execução de script definido no servidor é menor que o definido em $executionTime **/ if(ini_get('max_execution_time') < $executionTime) { /** altera o limite de processamento para o tempo definido em $executionTime **/ set_time_limit($executionTime); } else { /** caso o tempo já definido for maior, utiliza-se dele para os testes **/ $executionTime = ini_get('max_execution_time'); } } else { /** caso servidor estiver em safe mode, recupera o tempo de execução definido pelo servidor **/ $executionTime = ini_get('max_execution_time'); } //executa caso a função URL envie 'ok' como paramero evitando execuções caso o arquivo seja chamado por outros meios. if($_GET['verifica'] == 'ok'){ $time = time(); sleep($sleepTime); for( $x =0, $max = count($_SESSION['idpagegru']); $x < $max; ++$x ) { if($_SESSION['idpagegru'][$x]==$_GET['pageativa']){ if(isset($_SESSION['ticket'][$x])){ if($_SESSION['ticket'][$x]==$_GET['ticket']){ include 'busca_postagem_baseB.php'; }else{ $_SESSION['ticket'][$x]=$_GET['ticket']; include 'busca_postagem_baseA.php'; } }else{ $_SESSION['ticket'][$x]=$_GET['ticket']; include 'busca_postagem_baseA.php'; } } } if((time() - $time) >= ($executionTime - ($sleepTime + 1))) { break; } $linkbd = null; } ?>
-
- long polling
- ajax
-
(e %d mais)
Tags: