Foros del Web » Programando para Internet » Javascript »

Detectar e Informar sobre Cambios registrados en tiempo real

Estas en el tema de Detectar e Informar sobre Cambios registrados en tiempo real en el foro de Javascript en Foros del Web. saludos compañeros mi consulta es la siguiente que tecnologia o como pudiera inciar el desarrollo del siguiente desafio: tengo un archivo que me muestra los ...
  #1 (permalink)  
Antiguo 27/07/2013, 21:53
 
Fecha de Ingreso: abril-2006
Mensajes: 72
Antigüedad: 18 años, 7 meses
Puntos: 0
Detectar e Informar sobre Cambios registrados en tiempo real

saludos compañeros mi consulta es la siguiente que tecnologia o como pudiera inciar el desarrollo del siguiente desafio:
tengo un archivo que me muestra los tickets asignados a un usuario al abrir el archivo consulto la base de datos verificando los tickets asignados (eso funciona) que deseo hacer que si el usuario esta viendo dicho archivo y en ese momento alguen le asigna a ese usuario un tickets se active una imagen en rojo q indique q hay tickets asignados pendientes por leer.
como se hace?
hay que crear una funcion que este constantemente monitoreando los cambios en la base de datos?
hay que enviar un aviso al momento que se asigna el ticket? como haria para reflejarlo en la pagina?
alguna recomendacion para empezar?
  #2 (permalink)  
Antiguo 28/07/2013, 09:03
Avatar de 0123  
Fecha de Ingreso: noviembre-2012
Ubicación: Entre la consola, el coda y un poco de photoshop
Mensajes: 263
Antigüedad: 12 años
Puntos: 10
Respuesta: Detectar e Informar sobre Cambios registrados en tiempo real

Buenas Bladde,

Puedes hacerlo de las siguientes formas:

1 - Iframe con refresh. Simplemente creas un iframe con las dimensiones del icono de alerta con un Meta Refresh Tag especifico. Es la forma más poco "moderna", pero sencilla y sin tener que empezar a aprender nuevas tecnologias, suponiendo que sabes HTML.

2 - AJAX. Puedes hacer que cada 10 segundos se pregunte al servidor con una llamada AJAX. O cada 100 segundos una pregunta automatica y cada 30 una mediante eventos del usuario, como mover el raton por ejemplo.

3 - Comet. La forma mas profesional y compleja. Creo que es seudo Comet. Abres una llamada mediante AJAX y mediante la liberacion del buffer del servidor liberas poco a poco nuevas lineas, luego con Javascript te encargarias de analizar los resultados. Estas llamadas pueden durar 4 minutos abiertas, si no recuerdo mal. Esta forma la usan algunos, hace tiempo creo que GMAIL la usaba. De todos modos requiere mucho tiempo implementarla.

4 - Cookies. Si es para una pagina donde los usuarios a su vez realizan otro tipo de cosas, puedes hacer que el sistema cambie el contenido de un cookie que indique cuantos mensajes tienen sin leer. Y con un setinterval en Javascript te encargarias de leer el contenido del cookie y actuar en consecuencia.

No se me ocurre ninguna más. Yo si no supiese javascript usaria la primera, sin duda. Mas sencilla imposible.

Un saludo!
  #3 (permalink)  
Antiguo 28/07/2013, 09:09
 
Fecha de Ingreso: abril-2006
Mensajes: 72
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Detectar e Informar sobre Cambios registrados en tiempo real

Probaré con la de ajax y sino puedo la primera sera la opción agradecido por las ideas leeré también sobre eso del comet
  #4 (permalink)  
Antiguo 28/07/2013, 09:33
 
Fecha de Ingreso: abril-2006
Mensajes: 72
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Detectar e Informar sobre Cambios registrados en tiempo real

http://www.forosdelweb.com/f127/ejem...olling-681509/

chekie ese post y no parece complicado la cosa pero queria preguntar por que usan un archivo txt en varios ejemplos lo e visto.

yo quisiera que en vez de:
$content = trim(file_get_contents('content.txt'));
while($content=='')
{
usleep(1000);
$content = trim(file_get_contents('content.txt'));
}
echo $content;

el preguntara por un campo en la BD y retornara algo, funcionaria igual? la duda surge por que en varios ejemplos colocan es un txt
  #5 (permalink)  
Antiguo 28/07/2013, 10:18
 
Fecha de Ingreso: abril-2006
Mensajes: 72
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Detectar e Informar sobre Cambios registrados en tiempo real

bue creo que lo resolvi quedando asi:
index.php
Código PHP:
 <?php
 session_start
();
  function 
hay_nuevos_ticket($username)
 {
     include 
'conexion.php';
     
$sql="select id_incidencias,id_ruta from ticket where recibe='$username' and (status='Asignada')";
                       
$consulta=mysql_query($sql) or die (mysql_error());  
                              if(
$res=mysql_fetch_object($consulta)){
                              return 
"Tiene Nuevos Tickets Asignados";
                             }else{
                             return 
"NO Tiene Nuevos Tickets Asignados";
                              }
     
     }
if(
$_POST)  
$username=$_SESSION['s_user_username'];
    
set_time_limit(0);    
    
header("Edge-control: no-store");
    
usleep(1000);
    
$content hay_nuevos_ticket($username);
    while(
$content=='')
    {
        
usleep(1000);
        
$content hay_nuevos_ticket($username);
    }
    echo 
$content;
    exit();
}
?>  
<html>
<head>    
</head>
<body>

    <div id="content">cargando</div>
<script type="text/javascript" src="comet.js"></script>
</body>
</html>
comet.js
Código:
var xmlhttp = function()
    {
        var a;try{a = new XMLHttpRequest();}
        catch(e){try{a = new ActiveXObject('Msxml2.XMLHTTP');}
        catch(e){try{a = new ActiveXObject('Microsoft.XMLHTTP');}
        catch(e){alert('Your browser doesn\'t support ajax');a=false;}
        }}return a;
    };  
    window.onload = function()
    {
        var a = new comet();
    };  
    var comet = function()
    {
        var a = new xmlhttp();
        a.open('post',window.location+"?"+Math.random()+"="+Math.random(), true);
        a.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        a.onreadystatechange = function()
        {
            if(a.readyState == 4)
            {
                document.getElementById('content').innerHTML = a.responseText;
                window.setTimeout(function(){
                    a = new comet();                    
                },1000);
                
            }
        };
        a.send('algo=algo');                
    };
recomendaciones para optimizar? mejores formas de hacerlo? acepto cualquier sugerencia saludos
  #6 (permalink)  
Antiguo 28/07/2013, 10:20
Avatar de 0123  
Fecha de Ingreso: noviembre-2012
Ubicación: Entre la consola, el coda y un poco de photoshop
Mensajes: 263
Antigüedad: 12 años
Puntos: 10
Respuesta: Detectar e Informar sobre Cambios registrados en tiempo real

Buenas Bladde,

Puedes hacer lo que tu quieras entre sleep y sleep. Yo lo use una vez para un chat. Consulta algun codigo cross browser para lo que es el script javascript, ya que lo complicado del asunto no se encuentra en el php, que es realmente sencillo, si no en el js.

Pero realmente si es para simple icono que alerte de nuevos mensajes yo no usaria comet, es demasiado inestable comparado con la alternativa del iframe, que jamas te dara error. No se, con los años intento usar las cosas más sencillas antes que las elegantes. Y es que sí, el comet parece y es la bomba, pero te dara un dolor de cabeza tremendo cuando en la versión x de IE no funcione correctamente, o cosas por estilo. En cambio el iframe es la bomba!. Que lo hagas con un iframe no significa que no puedas crear animaciones y lo que tu quieras, simplemente tienes que usar el evento onload del iframe.

No se, me voy por las ramas. Sobre tu pregunta, sí, puedes llamar a la bbdd... e ira perfecto.

Otra cosa, sobre el comet, si lo vas a usar para un proyecto con mucho trafico empieza a calcular el volumen de llamadas que puede soportar tu servidor, ya que si lo piensas, con el comet mantienes llamadas constantes de varios minutos, lo que al servidor no le va a gustar, jeje.

Aioooo!!!
  #7 (permalink)  
Antiguo 28/07/2013, 10:25
Avatar de 0123  
Fecha de Ingreso: noviembre-2012
Ubicación: Entre la consola, el coda y un poco de photoshop
Mensajes: 263
Antigüedad: 12 años
Puntos: 10
Respuesta: Detectar e Informar sobre Cambios registrados en tiempo real

No te he leido, jeje.

Ese sleep... no recuerdo bien, pero son 1000 segundos?.

Eso no es posible, el comet tiene un limite respecto a los navegadores. Tampoco recuerdo bien, pero no se si el Firefox tiene un limite de 4 minutos o algo parecido, el resto tienen menos tiempo.

Es un limite de segundos por los que vas a tener que pasar. Tambien el servidor tiene un limite con la duracion de los scripts php.

Un saludo

pd: no se como es ahora, pero si abres un chat en gmail ves abrirse un comet, puedes mirar los segundos que duran. Recuerdo que deje de trabajar con esta herramienta por la poca información que hay en internet. Menudo mosqueo me lleve, jeje.
  #8 (permalink)  
Antiguo 28/07/2013, 11:12
 
Fecha de Ingreso: abril-2006
Mensajes: 72
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Detectar e Informar sobre Cambios registrados en tiempo real

bien por la info hermano ya esta funcionando al pelo sobre el sistema hace lo necesario si el usuario "x1" esta con sesion abierta se muestra "No tienes Tickets Nuevos" y cuando el usuario "y1" desde su sesion le asigna un ticket a "x1" a este le cambia el mensaje a "TIENES UN NUEVO TICKET ASIGNADO".

pero haz dicho cosas interezantes como lo del trafico y los tiempos que no lo capte muy bien. te pregunto el iframe no seria como hacerlo con ajax?
es decir una consulta por get a un archivo puente que me indique si la consulta a la BD tiene un nuevo registro para ese usuario. y solo faltaria una funcion que repita la consulta constantemente.
en el ejemplo son milisegundos segun el primer post de donde saque la informacion recuerda eso fue adaptado de lo publicado en este post : http://www.forosdelweb.com/f127/ejem...olling-681509/
  #9 (permalink)  
Antiguo 28/07/2013, 16:10
Avatar de 0123  
Fecha de Ingreso: noviembre-2012
Ubicación: Entre la consola, el coda y un poco de photoshop
Mensajes: 263
Antigüedad: 12 años
Puntos: 10
Respuesta: Detectar e Informar sobre Cambios registrados en tiempo real

Buenas BLADDE,

Sí, sobre el papel el iframe es parecido al AJAX. Yo para serte sincero lo haria con AJAX, pues lo uso bastante en todas las webs que me ha tocado programar. Pero como pensaba que no sabias de Javascript y no era más que un problema puntual... te dije lo del iframe.

Aun asi, sin haberlo hecho me entran ganas de probar como quedaria con el iframe.

Realmente la eleccion que escojas es buena.

Un saludo

Etiquetas: cambios, funcion, real, registrados, tiempo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:35.