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

Refrescar muro y notificaciones "on the fly" con node.js

Estas en el tema de Refrescar muro y notificaciones "on the fly" con node.js en el foro de Node.js en Foros del Web. Buenas a todos! Les explico. Estoy programando un muro igualito que el de Facebook o Tuenti y, ya que el volumen de usuarios potenciales del ...
  #1 (permalink)  
Antiguo 21/09/2012, 09:42
 
Fecha de Ingreso: febrero-2012
Ubicación: Mallorca
Mensajes: 8
Antigüedad: 7 años, 9 meses
Puntos: 1
Refrescar muro y notificaciones "on the fly" con node.js

Buenas a todos! Les explico.

Estoy programando un muro igualito que el de Facebook o Tuenti y, ya que el volumen de usuarios potenciales del servicio va a ser realmente alto, quiero optimizarlo bien.

Como sabrán, cuando en Facebook un amigo envía una noticia, esta es enviada a todos sus amigos conectados y, automáticamente, aparece en sus muros sin necesidad de actualizar. Para hacer esto existen dos maneras. Una cutre y otra optimizada y realmente eficaz. Vamos a explicarlas:
  • Cutre: Esta consistiría en hacer peticiones AJAX contra nuestro servidor. En donde tendríamos una función que nos verificaría si hay avisos o mensajes nuevos que mostrar, si no hubiese no devolvería nada. Como ven, hacer una petición cada, por ejemplo, 2 segundos para ver si hay notificaciones es algo realmente cutre. Aparte de que si tuviese que programar un chat sería realmente lento.
  • Optimizada: La parte optimizada sería el de usar algún servidor que no sea Apache que soporte conexiones largas (Apache por defecto no lo soporta). Sobre este tema me he informado y he leído bastate sobre node.js, que creo que sería el servidor ideal, puesto que existen módulos capaces de comunicar node.js con MySQL. Mis dudas vienen aquí:

Como sabran, Facebook tiene 900 Millones de usuarios y, cuando uno de estos envía un mensaje al muro, no se envía a todos ellos el mensaje, solamente se envía a sus amigos. Con esto, entiendo que hay una lógica de programación entre su servidor de notificaciones y el cliente.

Mi pregunta es, como implementar esta lógica? con sesiones? Y como verifico las nuevas notificaciones? con un bucle en el servidor node.js que haga consultas en el MySQL? Había pensado en la posibilidad que, en cuanto un usuario envíe un texto, notifique de alguna manera a node.js este echo y ya el propio node.js se encargaría de enviarlo a los usuarios adecuados.

Alguno de ustedes que domine el tema puede explicarme los pasos a seguir? Ya que no consigo entender como notificar a node.js los eventos que se producen "al vuelo" y estos a un grupo selecto (a los amigos del usuario) de usuarios.

Otra pregunta para quien domine node.js. Saben si node.js resistiria una alta carga de conexiones? Supongamos, por ejemplo, que se conectan 10.000 usuarios a la vez. Node.js lo soportaría? Ya que he leido que node.js no es "multihilo" como Apache.

Un saludo y muchas gracias! :)
  #2 (permalink)  
Antiguo 21/09/2012, 10:14
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 8 años, 6 meses
Puntos: 343
Respuesta: Refrescar muro y notificaciones "on the fly" con node.js

Te veo con ganas de investigar sobre sockets.

Libreria recomendada: Socket.io

http://socket.io/

Por la concurrencia, te diría que ni te preocupes por eso ahora, pasar de una idea loca a 10.000 usuarios concurrentes requiere algo más que imaginación.
__________________
blog | @aijoona
  #3 (permalink)  
Antiguo 21/09/2012, 10:21
 
Fecha de Ingreso: febrero-2012
Ubicación: Mallorca
Mensajes: 8
Antigüedad: 7 años, 9 meses
Puntos: 1
Respuesta: Refrescar muro y notificaciones "on the fly" con node.js

Cita:
Iniciado por Aijoona Ver Mensaje
Te veo con ganas de investigar sobre sockets.

Libreria recomendada: Socket.io

[url]http://socket.io/[/url]
He estado leyendo ya sobre muros "Real Time" en node.js y creo que sería capad de "imitar" a uno de estos. Mi duda es como dirigir las respuestas a los amigos del usuario que lo ha publicado. Entiendo que tiene que haber una lógica, pero no se si implementarla en PHP o directamente sobre node.js.

Muchas gracias por el aporte :D

Cita:
Iniciado por Aijoona Ver Mensaje
Por la concurrencia, te diría que ni te preocupes por eso ahora, pasar de una idea loca a 10.000 usuarios concurrentes requiere algo más que imaginación.
Evidentemente de la noche a la mañana no voy a tener tal tráfico de datos. Pero más vale prevenir que curar. Por cierto, la idea de este muro forma parte de otra mucho más madura, que con total seguridad verá la luz

Un saludo y gracias Aijoona!
  #4 (permalink)  
Antiguo 21/09/2012, 10:44
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 8 años, 6 meses
Puntos: 343
Respuesta: Refrescar muro y notificaciones "on the fly" con node.js

La idea de sockets es justamente mantener conexiones abiertas con los clientes, con lo cual podes usar una arquitectura pub-sub, donde los clientes emiten eventos y el servidor responde de manera acorde.

Para este tipo de cosas node.js te va a dar mejores resultados que PHP (de hecho no conozco implementación de websockets sobre PHP).
__________________
blog | @aijoona
  #5 (permalink)  
Antiguo 21/09/2012, 11:55
 
Fecha de Ingreso: febrero-2012
Ubicación: Mallorca
Mensajes: 8
Antigüedad: 7 años, 9 meses
Puntos: 1
Respuesta: Refrescar muro y notificaciones "on the fly" con node.js

Cita:
Iniciado por Aijoona Ver Mensaje
La idea de sockets es justamente mantener conexiones abiertas con los clientes, con lo cual podes usar una arquitectura pub-sub, donde los clientes emiten eventos y el servidor responde de manera acorde.

Para este tipo de cosas node.js te va a dar mejores resultados que PHP (de hecho no conozco implementación de websockets sobre PHP).
Perfecto! Pues creo que mi razonamiento o mi conocimiento es erróneo en cuanto a la concepción de la idea. Ya que no llego a poder relacionar un evento de un usuario con los de los demás usuarios.

Entiendo que al publicar un texto, aparte de enviarlo a la BD a través de PHP (en realidad estoy utilizando el framework Symfony2), tendría que disparar un evento en node.js y este, a su vez, reaccionase de manera que enviase una notificación de evento al usuario amigo. Planteemoslo así:

- Usuario1 envia un texto a la BD. Por ende dispara un evento en node.js
- node.js evalua esto: Si usuarioN es amigo de Usuario1, se envia el evento. De lo contrario no se envia nada.

Para hacer esta comparación se tendría que enviar una petición a la BD para confirmar la amistad, cosa que no es problema. El problema que tengo es que no se como distinguir usuarios.

Un saludo y muchas gracias por la ayuda :)

Etiquetas: ajax, fly, js, muro, notificaciones, refrescar, select
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:51.