Foros del Web » Programando para Internet » Node.js »

[SOLUCIONADO] problema con los socket. Pareciera que se multiplicara el envio de datos

Estas en el tema de problema con los socket. Pareciera que se multiplicara el envio de datos en el foro de Node.js en Foros del Web. Holas chicos como estan :D. Tengo un problema que no se como solucionar. Yo envio datos y los recivo con un callback o a veces ...
  #1 (permalink)  
Antiguo 23/10/2013, 09:20
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 11 meses
Puntos: 2
problema con los socket. Pareciera que se multiplicara el envio de datos

Holas chicos como estan :D. Tengo un problema que no se como solucionar. Yo envio datos y los recivo con un callback o a veces los envio del servidor con otro socket.emit pero el problema es que si por ejemplo: Yo doy click en la foto de un auto envia datos y recive, lo malo es cuando le doy otra ves click en esa imagen ya hace dos veces lo que hice, y si le vulevo a dar click lo hace tres veces cuando la verdad solo quiero uno mas. Una vez paso y lo logre evitar cambiando esto
Código Javascript:
Ver original
  1. socket.on('funcion', funcion);//mostraba error
  2. //por esto
  3. socket.once('funcion', funcion);//ya no se repetia cuando se recivia
pero ahora el problema viene con el emit!!!! no habra alguna forma yo no se depronto de hacer que solo envie una vez y no se repite el envio por que cuando actualizo si funciona bn pero le vuelvo a dar click vuelve y se repite. Y no es en esa parte de mi codigo que pasa eso esta pasando hasta en un chat que cree donde se envia un mensaje aparecen como tres (claro todos iguales) y cuando actualizo vuelve a ser uno normal :( que mal la verdad no se que hacer porque eso esta espantando a mis clientes
  #2 (permalink)  
Antiguo 23/10/2013, 10:17
Avatar de utan  
Fecha de Ingreso: agosto-2012
Mensajes: 126
Antigüedad: 12 años, 3 meses
Puntos: 17
Respuesta: problema con los socket. Pareciera que se multiplicara el envio de datos

Revisa que no estés atachando mas eventos con el click de tu foto.. ya me a pasado varias veces..
__________________
Mis conocimientos son limitado, pero si te puedo ayudar lo are gustoso mi chat particular, visitalo gracias http://rendezvouschat.com
  #3 (permalink)  
Antiguo 23/10/2013, 15:24
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: problema con los socket. Pareciera que se multiplicara el envio de datos

uyyy si eso era ja ja aj carajo es algo muy pendejo. pero es que la que hace el envio del socket se llama a ella misma por que hay cosas que se necesitan de esa función. Asi que las dividi para evitar problema y sacar el click y ponerlo en otra funcion asi cuando reciva el cb del socket va a llamar solo a las otras funciones sin la del evento click que accion todo. Claro me falta retocarla pero ya casi :D logro lo que quiero.

y lo del chat que envia hasta tres mensajes cuando solo es uno lo voy a investigar por que ese si solo aparece despues de una larga conversación. Y la gente me comenta y pues les digo que la solucion momentanea es actualizar la página
  #4 (permalink)  
Antiguo 23/10/2013, 16:40
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: problema con los socket. Pareciera que se multiplicara el envio de datos

ja intente de muchas formas pero pues bueno hay solucion pero me costo. No pude habilitar unas opciones
no lo explico por que es bastante complicado y se haria largo el mensaje
  #5 (permalink)  
Antiguo 23/10/2013, 17:46
Avatar de utan  
Fecha de Ingreso: agosto-2012
Mensajes: 126
Antigüedad: 12 años, 3 meses
Puntos: 17
Respuesta: problema con los socket. Pareciera que se multiplicara el envio de datos

Bueno que lo solucionaras..
__________________
Mis conocimientos son limitado, pero si te puedo ayudar lo are gustoso mi chat particular, visitalo gracias http://rendezvouschat.com
  #6 (permalink)  
Antiguo 24/10/2013, 23:12
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: problema con los socket. Pareciera que se multiplicara el envio de datos

ya los solucione. Despues de una larga inspeccion me di de cuenta de los siguiente:
Jquery guarda la cantidad de veces que una funcion la llama. Es algo dificil de explicar pero se podria decir que si tu llamas una funcion que se llame click tres veces, pues cuando le des click esta order se ejecutara tres veces
Código Javascript:
Ver original
  1. for(var i=0; i<4; i++){
  2.     clic();//la llamamos tres veces
  3. }
  4.  
  5. function clic(){
  6.    $('#hola').on('click', function(){
  7.         alert('hola');
  8.    });
  9. }
  10. //mostrara hola tres veces
asi que nada que hacer. Aunque debo de decir que con javascript puro solo me seleccionada el primer elemento de los que habian.
Código HTML:
Ver original
  1. <div id="hellos">Hola</div>
  2. <div id="hellos">Mundo</div>
  3. <div id="hellos">Donde </div>
  4. <div id="hellos">Cuando</div>
Código Javascript:
Ver original
  1. function se(ab){
  2.  return document.querySelector(ab);
  3. }
  4.  
  5. se('#hellos').addEventListener('click', function(){
  6.      console.log(this.textContent);
  7. }, false);//tdabia no se para que sierve este boolean
  8.  
  9. //solo muestra Hola

entonces tube que encontrar un punto de equilibrio entre estas dos formas. y Pues la haye. Deje los eventos que estan hechos solo con javascript para las repuestas de un socket. debido a que habeces estas son muchas y como con javscript puro no se gusradan las cantidades de llamados pues es perfecto. aAsi que si un socket hace un llamado de 5 veces una funcion que contiene un click con javascript pues este solo hara lo que tiene especificado una vez. Y las mismas funciones pero hechas con jquery las deje para el archivo cuando se cargue, algo asi que como que solo vana usar una vez y no mas hasta que se vuelva acargar la pagina. Espero alguien le sirva este tutorial y problema que vaya que me estaba poniendo como pensativo acerca de node
  #7 (permalink)  
Antiguo 24/10/2013, 23:33
Avatar de utan  
Fecha de Ingreso: agosto-2012
Mensajes: 126
Antigüedad: 12 años, 3 meses
Puntos: 17
Respuesta: problema con los socket. Pareciera que se multiplicara el envio de datos

Hola,

Claro te da "hola" solamente porque el evento se atacha al primer id que encontro en el html, el ID en html markup es único para dar como la palabra dice un id a un elemento, debes usar "class" para varios elementos si quieres usar el mismo nombre, eh ayi el problema y después atachar el click con un loop a cada elemento o usas "delegation" en Jquery.. ..

No entiendo cuando dices que Jquery va guardando la función cuantas veces aya sido corrida?
__________________
Mis conocimientos son limitado, pero si te puedo ayudar lo are gustoso mi chat particular, visitalo gracias http://rendezvouschat.com
  #8 (permalink)  
Antiguo 25/10/2013, 20:50
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: problema con los socket. Pareciera que se multiplicara el envio de datos

pues es algo dificil de explicar pero te lo si miras el codigo primero donde esta el for intentalo y veras que creo que es cierto y si no es asi pues talves solo funciona con los callbakcs.
Código Javascript:
Ver original
  1. socket.on('prueba', function(a){
  2.      //es la funcion de arriba
  3.      clic();
  4. });
entonces cada ves que se escuche prueba con el socket se llama clic() que pues tiene dentro la accion de escuchar click y pues bueno mostrara HOLA las cantidades de veces que el callback aparesca o se escuche ese evento 'prueba'. si todabia no lo logras entender hay si no se intenta creeme si trabajas con jquery y socket te ayudara por que yo no sabia que hacer hasta que analiza bn como funciona o ese fue un descubrimiento :D. Te recomendaria que usaras el codigo de arriba el del for y en vez de un alert poc console.log('hola').
  #9 (permalink)  
Antiguo 26/10/2013, 09:55
Avatar de utan  
Fecha de Ingreso: agosto-2012
Mensajes: 126
Antigüedad: 12 años, 3 meses
Puntos: 17
Respuesta: problema con los socket. Pareciera que se multiplicara el envio de datos

@sonickseven, los eventos que ataches a un elemento solo son atachados una ves, queriendo decir que la primera ves que "prueba" se reciva este atachara el click a ese elemento, si mas veces es recibido el evento "prueba" a ese elemento nada pasara porque el elemento ya tiene atachado el evento de click,

asiéndolo inseseracio no te puedo decir que estas asiendo bien lo que estas programando pero es "redundant" mas bien si vas hacer que elementos escuche algún evento deverias ponerlos en un "init" metodo después que tengas una connection correcta a tu socket..

Si tienes complicaciones en tu código o algo sale buggy es porque no estas haciendo procedimientos estándares y positivamente correctos...

Pero cada quien en su forma de crear códigos, y no soy quien para decirte que hacer, ademas seria bueno que consideres como lo dije anteriormente el "ID" en html markup es único y solo un elemento puede tenerlo, si tienes bugs en tu código es por allí que tenes que buscar por errores..

Estas son sugestiones y no me las tomes a mal, espero que no malentiendas mi comentario..
__________________
Mis conocimientos son limitado, pero si te puedo ayudar lo are gustoso mi chat particular, visitalo gracias http://rendezvouschat.com
  #10 (permalink)  
Antiguo 26/10/2013, 20:12
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: problema con los socket. Pareciera que se multiplicara el envio de datos

no tranquilo igual yo en todo momento me presto para aprender :D

pero como te digo fue una de las unicas formas que pude solucionar y pues ya no hay errores. Mas sin embargo me gustaria comunicarme con tigo no se por hangout para que veas como llevo mi proyecto o solo unas partes importantes y me des algo de como ayuda para organizar mejor el codigo. Y para compartir ideas.

[email protected]

Etiquetas: socket
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 09:26.