Foros del Web » Programando para Internet » Javascript » Frameworks JS »

[SOLUCIONADO] SocketIO auto emit

Estas en el tema de SocketIO auto emit en el foro de Frameworks JS en Foros del Web. Hola a todos, Tengo el siguiente proyecto: Un cliente Web que se conecta con PonyExpress (Express + SocketIO + Node.js) a un servidor Node.js detras ...
  #1 (permalink)  
Antiguo 04/11/2013, 20:40
 
Fecha de Ingreso: julio-2009
Mensajes: 8
Antigüedad: 14 años, 9 meses
Puntos: 0
Información SocketIO auto emit

Hola a todos,

Tengo el siguiente proyecto:

Un cliente Web que se conecta con PonyExpress (Express + SocketIO + Node.js) a un servidor Node.js detras de un servidor nginx.

Como backend tengo el nginx redireccionando las peticiones /node al server de Node.js y las peticiones /ecg al servidor Django.

Logre realizar la conexión con SocketsIO a traves de PonyExpress de una de mis colecciones, y logro que se actualicen en todos los navegadores abiertos al momento de modificarlas en uno de ellos.

El problema esta en que necesito que se lanze el evento emit de socketIO cuando hay algún cambio en una tabla determinada, asi que uso request.js en Node.js dentro de una función setInterval para estar continuamente observando la base de datos por algun cambio. Esto funciona pero cuando lanza el emit con el update a los navegadores, estos dicen que los items necesitan ID y el id va en el JSON entregado por el emit; asi que no se que pueda estar faltando.

setInterval en el servidor Node.js


Código:
setInterval(function(){
    if(Math.random() > 0.3){

		request({
					url:'http://'+IP_DJANGO+':'+PUERTO_DJANGO+'/ecg/notas/',
					json: true
				}, 
					function (error, response, body) {
					if (!error && response.statusCode == 200) {
							//res2.send(body );
							console.log('notas::update', body);
							io.sockets.emit('notas::update', body);
						}
					});
    }
},5000);
Cargue de la coleccion y conexion con socketsIO


Código:
window.collections.notas = new Ecg.Collections.NotaCollection();

	window.ponyExpress = new PonyExpress({
		io: window.location.origin+':8191'
	});

	window.ponyExpress.bind('connect', function(){
		window.plugs.lectura = new PonyExpress.BackbonePlug({
			collection: window.collections.lectura
		});
		window.plugs.nota = new PonyExpress.BackbonePlug({
			collection: window.collections.notas
		});
	});

Última edición por joshua1983; 05/11/2013 a las 07:24
  #2 (permalink)  
Antiguo 09/11/2013, 09:14
 
Fecha de Ingreso: julio-2009
Mensajes: 8
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: SocketIO auto emit

Gracias a todos por leer el post, ya encontre la solucion. El problema era mas conceptual:

El problema estaba en que cuando se emitia un update por parte de socket.io, en el body enviaba todos los datos y se tenia que enviar solamente el item que cambió, por lo que PonyExpress espera solamente un item no un array de items, asi que no encontraba el id.

Código:
for (var i= 0; i<datosNuevos.length; i++){
	
	if (notas[i].texto != datosNuevos[i].texto){
			io.sockets.emit('notas::update', datosNuevos[i]);	
	}
}

Etiquetas: auto, funcion, javascript, js
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 01:47.