Foros del Web » Programando para Internet » Javascript »

setInterval tumba conexion

Estas en el tema de setInterval tumba conexion en el foro de Javascript en Foros del Web. hola he hecho una especie de chat sencillo y uso la funcion setInterval para saber que agente esta conectado : PHP: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: ...
  #1 (permalink)  
Antiguo 03/10/2013, 10:01
Avatar de kakashi20  
Fecha de Ingreso: septiembre-2009
Mensajes: 616
Antigüedad: 14 años, 7 meses
Puntos: 15
Exclamación setInterval tumba conexion

hola

he hecho una especie de chat sencillo y uso la funcion setInterval para saber que agente esta conectado :

PHP:

Código PHP:
Ver original
  1. <?
  2.                    
  3.                     $sql_grupo = "SELECT * FROM agentes";
  4.                                        
  5.                     $query_sql_grupo = mysql_query($sql_grupo);
  6.                    
  7.                    
  8.                     for ( $i=0;$i<mysql_num_rows($query_sql_grupo);$i++ ){
  9.                        
  10.                     $token = substr(md5(rand()),0,10);
  11.                    
  12.                     ?>
  13.                    
  14.                    
  15.                     <div style="border-right:1px solid #CCC; width:200px; height:130px; float:left; padding:5px; display:inline-block; margin-left:20px; margin-top:15px" align="left">
  16.                    
  17.                     <?
  18.                    
  19.                     $conexion = new ConexionBaseDatos;
  20.                             $link = $conexion->Conectarse($conexion);
  21.                            
  22.                             $id = mysql_result($query_sql_grupo,$i,"id_trab");
  23.                            
  24.                             $sql = "SELECT * FROM trabajadores WHERE id = '$id'";
  25.                                        
  26.                             $query_sql = mysql_query($sql);
  27.                            
  28.                            
  29.                         echo "<div class='foto_tecnico3' align='left'><img src='../WebAdmin/archivos/fotos/trabajadores/".mysql_result($query_sql,0,"foto")."' width='70' height='80' /></div>";
  30.                                                                
  31.                             echo "<div class='nom_tecnico3' align='center'>".mysql_result($query_sql, 0, 'p_nombre')." ".mysql_result($query_sql, 0, 'p_apellido')."</div>";
  32.                            
  33.                            
  34.                             $sql_sum = "SELECT count(puntaje) as cont, sum(puntaje) as su from puntaje_trabajadores WHERE id_trabajador = '".mysql_result($query_sql, 0, 'id')."'";
  35.                    
  36.                             $query_sql_sum = mysql_query($sql_sum);
  37.                            
  38.                             $su = mysql_result($query_sql_sum,0,"su");
  39.                            
  40.                             $cont =  @mysql_result($query_sql_sum,0,"cont");
  41.                            
  42.                             @$total = $su / $cont;
  43.                            
  44.                            
  45.                            
  46.                             echo "<div id='casos_chat'  align='center'><span style='color:#333; font-style:italic; font-weight:bold'>".$cont." Casos</span></div>";
  47.                            
  48.                            
  49.                            
  50.                             if ( $cont == 0 ){ ?>
  51.                            
  52.                             <div id="rating3">
  53.                            
  54.                                 <div id="rat1" class="rating1"></div>
  55.                                 <div id="rat2" class="rating2"></div>
  56.                                 <div id="rat3" class="rating3"></div>
  57.                                 <div id="rat4" class="rating4"></div>
  58.                                 <div id="rat5" class="rating5"></div>
  59.                            
  60.                             </div>
  61.                            
  62.                             <?php } ?>    
  63.                            
  64.                            
  65.                            
  66.                             <?php if ( $total >= 1 && $total < 2 ){ ?>
  67.                            
  68.                             <div id="rating3">
  69.                            
  70.                                 <div id="rat1" class="rating11"></div>
  71.                                 <div id="rat2" class="rating2"></div>
  72.                                 <div id="rat3" class="rating3"></div>
  73.                                 <div id="rat4" class="rating4"></div>
  74.                                 <div id="rat5" class="rating5"></div>
  75.                            
  76.                             </div>
  77.                            
  78.                             <?php } ?>
  79.                            
  80.                             <?php if ( $total >= 2 && $total < 3 ){ ?>
  81.                            
  82.                             <div id="rating3">
  83.                            
  84.                                 <div id="rat1" class="rating11"></div>
  85.                                 <div id="rat2" class="rating22"></div>
  86.                                 <div id="rat3" class="rating3"></div>
  87.                                 <div id="rat4" class="rating4"></div>
  88.                                 <div id="rat5" class="rating5"></div>
  89.                            
  90.                             </div>
  91.                            
  92.                             <?php } ?>
  93.                            
  94.                             <?php if ( $total >= 3 && $total < 4 ){ ?>
  95.                            
  96.                             <div id="rating3">
  97.                            
  98.                                 <div id="rat1" class="rating11"></div>
  99.                                 <div id="rat2" class="rating22"></div>
  100.                                 <div id="rat3" class="rating33"></div>
  101.                                 <div id="rat4" class="rating4"></div>
  102.                                 <div id="rat5" class="rating5"></div>
  103.                            
  104.                             </div>
  105.                            
  106.                             <?php } ?>
  107.                            
  108.                             <?php if ( $total >= 4 && $total < 5 ){ ?>
  109.                            
  110.                             <div id="rating3">
  111.                            
  112.                                 <div id="rat1" class="rating11"></div>
  113.                                 <div id="rat2" class="rating22"></div>
  114.                                 <div id="rat3" class="rating33"></div>
  115.                                 <div id="rat4" class="rating44"></div>
  116.                                 <div id="rat5" class="rating5"></div>
  117.                            
  118.                             </div>
  119.                            
  120.                             <?php } ?>
  121.                            
  122.                             <?php if ( $total == 5 ){ ?>
  123.                            
  124.                             <div id="rating3">
  125.                            
  126.                                 <div id="rat1" class="rating11"></div>
  127.                                 <div id="rat2" class="rating22"></div>
  128.                                 <div id="rat3" class="rating33"></div>
  129.                                 <div id="rat4" class="rating44"></div>
  130.                                 <div id="rat5" class="rating55"></div>
  131.                            
  132.                             </div>
  133.                            
  134.                             <?php } ?>
  135.                    
  136.                     <br />
  137.                    
  138.                     <? $token = substr(md5(rand()),0,10); ?>
  139.    
  140.                     <script>
  141.                    
  142.                         $(document).ready(function() {  
  143.                          
  144.                                
  145.                             //setInterval("actualizar('<? echo $token; ?>','<? echo mysql_result($query_sql_grupo,$i,"id"); ?>')", 2000 );  
  146.                                    
  147.                                        
  148.                         });
  149.                    
  150.                     </script>
  151.                    
  152.                     <br />
  153.                    
  154.                    
  155.                    
  156.                     <div id="iniciar<?  echo $token; ?>">
  157.                    
  158.                         <a href="chat.php?id=<? echo mysql_result($query_sql_grupo,$i,"id"); ?>" target="_blank"><img src="img/conectado.fw.png" title="Conectado" /></a>
  159.                    
  160.                     </div>
  161.                    
  162.                    
  163.                     <div id="noiniciar<?  echo $token; ?>" style="color:#F00">
  164.                    
  165.                         <img src="img/noconectado.fw.png" title="No Conectado" />
  166.                    
  167.                     </div>
  168.                    
  169.                    
  170.                     <br />
  171.                    
  172.                    
  173.                    
  174.                    
  175.                    
  176.                    
  177.                     </div>
  178.                    
  179.                     <? } ?>


Jquery:

Código Javascript:
Ver original
  1. function actualizar(token,id){  
  2.                
  3.                     var str = "id="+id;
  4.  
  5.                    
  6.                    
  7.                    
  8.                     $.ajax({
  9.            
  10.            
  11.                         type: 'POST',
  12.            
  13.            
  14.            
  15.                         url: 'VerificarStatus.php',
  16.            
  17.                        
  18.            
  19.                         data: str,
  20.            
  21.            
  22.            
  23.                         success:function(msg){
  24.            
  25.            
  26.            
  27.                                     if ( msg == 0){
  28.                                    
  29.                                         $("#noiniciar"+token).fadeIn();
  30.                                         $("#iniciar"+token).fadeOut();
  31.                                        
  32.                                     }
  33.                                    
  34.                                     if ( msg == 1){
  35.                                    
  36.                                         $("#iniciar"+token).fadeIn();  
  37.                                         $("#noiniciar"+token).fadeOut();
  38.                                        
  39.                                     }
  40.              
  41.                    
  42.                         }
  43.            
  44.            
  45.            
  46.                     });
  47.  
  48.                
  49.                
  50.                 }



el problema es que esa función setInterval me tumba la conexión al hosting, osea que la pagina se cae y todo lo que esta dentro del hosting también.

porque sucede esto ?

el detalle es que necesito usar esa función para saber si cada agente esta conectado en el momento y recargar su estado automáticamente.

si alguien me pudiese ayudar se lo agradeceria
  #2 (permalink)  
Antiguo 03/10/2013, 10:44
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: setInterval tumba conexion

¿A qué te refieres con que "tumba" la conexión al hosting? ¿en el usuario o en todos?

Veo que el intervalo es de 2 segundos, si hay muchos usuarios en línea esto puede causar demasiadas conexiones simultáneas y saturar mysql, te sugiero actualizar como mínimo cada 10 segundos, considerando una buena ventana de tiempo 30 segundos, y una ventana algo espaciada 1 minuto.

Verifica la cantidad de conexiones simultáneas de mysql y de ser necesario y posible, aumenta dicha cantidad.


Honestamente no sé por qué generar el token y por qué un código tan largo, pero yendo al grano, ¿revisaste que tus consultas sean correctas? si hubiera un error en una consulta sería normal que no continuara la ejecución en algunos casos.

Como sugerencia si este código es sólo para ver usuarios conectados: en la tabla de usuarios u otra tabla coloca un campo con la última fecha/hora de conexión, cada vez que consultes por los usuarios conectados actualiza esta fecha, para que así puedas consultar por los usuarios con menos de x segundos conectados. Y podrías devolver el resultado en un json, para que al recibirlo sea el navegador (cliente) quien dibuje lo necsario disminuyendo la carga del servidor.
  #3 (permalink)  
Antiguo 03/10/2013, 11:40
Avatar de javioreto  
Fecha de Ingreso: enero-2005
Ubicación: C:\España\Bilbao
Mensajes: 1.212
Antigüedad: 19 años, 2 meses
Puntos: 15
Respuesta: setInterval tumba conexion

Siguiendo en la misma línea que "ocp001a" si se trata de saturación de consultas simultáneas, es muy recomendable cerrar las conexiones a base de datos. Por lo general la gente olvida cerrarlas dado que se cierran solas cada X tiempo, pero si hay muchas consultas simultáneas ese tiempo es excesivo.

Código PHP:
Ver original
  1. mysql_close($conexion);

No obstante, mysql según el último estandar están obsoletos y deberian usarse los siguientes:

Código PHP:
Ver original
  1. mysqli::__construct(); /*Abre una nueva conexión al servidor MySQL*/
  2. mysqli_init(); /*Inicializa y devuelve un recurso para utilizarlo con */
  3. mysqli_real_connect(); /*Abre una conexión a un servidor mysql*/
  4. mysqli_close(); /* Cierra una conexión mysql*/
  #4 (permalink)  
Antiguo 03/10/2013, 13:34
Avatar de kakashi20  
Fecha de Ingreso: septiembre-2009
Mensajes: 616
Antigüedad: 14 años, 7 meses
Puntos: 15
Respuesta: setInterval tumba conexion

en realidad lo del boton conectado es solo esta parte


Código HTML:
Ver original
  1. <? $token = substr(md5(rand()),0,10); ?>
  2.    
  3.                     <script>
  4.                    
  5.                         $(document).ready(function() {  
  6.                          
  7.                                
  8.                             //setInterval("actualizar('<? echo $token; ?>','<? echo mysql_result($query_sql_grupo,$i,"id"); ?>')", 2000 );  
  9.                                    
  10.                                        
  11.                         });
  12.                    
  13.                     </script>
  14.                    
  15.                     <br />
  16.                    
  17.                    
  18.                    
  19.                     <div id="iniciar<?  echo $token; ?>">
  20.                    
  21.                         <a href="chat.php?id=<? echo mysql_result($query_sql_grupo,$i,"id"); ?>" target="_blank"><img src="img/conectado.fw.png" title="Conectado" /></a>
  22.                    
  23.                     </div>
  24.                    
  25.                    
  26.                     <div id="noiniciar<?  echo $token; ?>" style="color:#F00">
  27.                    
  28.                         <img src="img/noconectado.fw.png" title="No Conectado" />
  29.                    
  30.                     </div>

el decir que se tumba la conexion es que google chrome dice que no se ha podido conectar a la pagina.

esto lo incluyo en un for donde saco el listado de agentes que tengo. El token lo hago diferenciar los id de conectado y no conectado de cada agente sacado de la bd dinamicamente para que la funcion que tiene el setInterval funcione para cada id independiente....

Etiquetas: ajax, conexion, funcion, jquery, php, setinterval
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 20:27.