2012-05-10 25 views
5

Voy a crear una aplicación web para administrar notas (piense en algo similar a Evernote). Decidí usar Backbone.js + JQuery del lado del cliente. Del lado del servidor, aún no lo he decidido: ya sea PHP puro (que yo conozco muy bien) o Node.js + Socket.io (completamente nuevo para mí).Node.js y Socket.io: ¿qué tan lejos pueden llegar con las aplicaciones web en tiempo real?

Estoy considerando Node.js + Socket.io porque me gustaría tener mi aplicación web en tiempo real (es decir: si un usuario actualiza una nota, esa nota se actualiza al instante para un colaborador que comparte esa nota, sin recargar la página).

También estaba considerando, como tercera alternativa, usar Node.js y Socket.io para la UI y PHP para la API REST (me siento más cómodo para construir una API con PHP). El código PHP y Javascript compartirán la base de datos MongoDB.

Mi pregunta es: si desarrollo API REST para mi aplicación web con PHP y una nueva nota para el usuario se crea a través de la API (es decir: la aplicación Android envía una solicitud API para crear esa nota) Node.js, Socket.it y Backbone.js ¿pueden actualizar al instante la IU del usuario y mostrar la nueva nota en su pantalla? Creo que se puede llamar "notificación de inserción".

Espero haber sido lo suficientemente claro.

Además, ¿existe alguna tecnología alternativa sobresaliente para construir aplicaciones web en tiempo real?

Respuesta

9

Sí Node.js + Socket.IO hará un muy buen trabajo en esto. El nodo usa un bucle de evento, esto significa que una solicitud se ingresa en una cola. Nodo se ocupa de estas solicitudes una a una. Los servidores web tradicionales se ocupan de un enfoque 'Thread-por-solicitud' en el que se crea un hilo para manejar esas solicitudes.

El beneficio de Node aquí es que no necesita cambiar de contexto tan a menudo, esto significa que puede manejar estas solicitudes muy rápidamente ... muy probablemente más rápido que su servidor PHP. Sin embargo, Node se ejecuta como un proceso único, en un único núcleo de CPU. Si su aplicación requiere una gran cantidad de CPU, podría ser que bloquee, lo que significa que el tiempo para cada solicitud será más lento.

Sin embargo, me parece que su aplicación no consume mucha CPU, lo que significa que Node.js funcionará bien.

Decisión Si su tiempo es limitado, y no desea aprender una nueva habilidad (Nodo), PHP estará bien. Si tiene tiempo, le recomiendo aprender Node.js, ya que es muy fuerte cuando se trata de tareas intensivas de E/S, como una API REST para crear notas.

Actualización de la interfaz de usuario Si su uso previsto es a través de un dispositivo móvil, recomiendo el uso de WebSockets pero tener un repliegue como a largo votación. Es posible actualizar la IU del Cliente utilizando Nodo o PHP. Sin embargo, desde mi experiencia, es mucho más fácil hacerlo con Socket.IO en Node.js.

Ejemplo Actualización del cliente utilizando Node.js/Socket.io

del lado del cliente

socket.on('new-note', function (data) { 
    placeNewNote(data); 
    }); 

-lado del servidor

socket.emit('new-note', data); 

Guía de inicio de Nodo: How do I get started with Node.js

Tenga en cuenta también, si se quiere construir un aplicación móvil nativa de Android que utiliza WebSockets ... tendrá que usar: Java socket.io client

+0

Jack, gracias por su respuesta. ¿Y qué hay de tiempo real? ¿Se reflejará un cambio a través de la API REST implementada con PHP en la interfaz de usuario inmediatamente? – dan

+1

He agregado información sobre cómo actualizar la interfaz de usuario. Mi último año de proyecto en la universidad fue muy similar a lo que estás creando ... Usé Node.js/Express/Socket.IO y almacené las 'Notas' en una base de datos MongoDB. – Jack

+0

¡Genial! ¿Y logras que todo funcione en tiempo real? – dan

2

El uso de Node.js para el servidor web y el servidor push es, por supuesto, la mejor manera. Sobre todo porque si vas a utilizar Node.js de todos modos, entonces tienes que aprenderlo, por lo que aprender cómo hacer un servidor web es natural (aconsejo usar el más famoso Express framework).

Ahora puede usar PHP para el servidor web y Node.js para el servidor de inserción. Para que se comuniquen entre ellos, probablemente desee agregar Redis a su aplicación. Redis le permitirá enviar notificaciones a cualquier cliente conectado a él, como el servidor PHP o el servidor de inserción Node.js (y se escala bien). A partir de ese punto, el servidor push enviará los datos al navegador del cliente.

La tecnología alternativa sería, por ejemplo, Twisted server. Por supuesto, necesitarás aprender Python para usarlo. Y no sé si es compatible con WebSockets correctamente. Creo que deberías quedarte con Node.js + socket.io.

+0

Gracias extraño. Así que estás diciendo que si elimino PHP de la ecuación y me baso en Backbone, Node, Socket.io, NO necesito Redit para tener una aplicación web en tiempo real. ¿Está bien? – dan

+0

IS ¿Expresa un reemplazo para Backbone.js? – dan

+1

@dan Sí, técnicamente no lo necesitas. Pero deberías usarlo de todos modos, ya que socket.io no puede escalar a muchas máquinas sin él (o al menos no sé de otra manera para escalarlo). Por lo tanto, debe usar Redis, a menos que suponga que una máquina será suficiente para su aplicación. Pero no debes hacer tales suposiciones. :) – freakish

Cuestiones relacionadas