2012-01-12 14 views
8

Estoy diseñando una aplicación de sondeo largo para transmitir pequeños cambios muy rápidamente a, posiblemente, una gran cantidad de usuarios. La aplicación se ejecutará en conjunto con un sitio web con un cms bastante estándar. Ambos se ejecutarán en un servidor, y para empezar también lo hará la base de datos.Opciones largas de sondeo: Nginx, PHP, Node.js

Vengo de un entorno LAMP y definitivamente soy un desarrollador y no un administrador del sistema. Dicho esto, no tengo miedo de probar algunas cosas nuevas.

He pasado el día investigando mis opciones y espero que la gente pueda responder algunas preguntas y darme algunas recomendaciones.

he reducido a éstos:

A. Apache and php for the website, Node.js for the app 
    B. Nginx and php for both the website and app 
    C. Nginx and php for website, Nginx and Node.js for the app 

Así que las preguntas:

  1. ¿Cómo maneja Nginx no multi-threadingness de PHP;). ¿Será PHP un cuello de botella tanto como apache para las encuestas largas?
  2. He oído que sugiero que use nginx como un proxy inverso frente a Apache y Node.js, ¿es esa una solución mejor que solo nginx? Si es así, ¿por qué?
  3. ¿Qué opción ha usado/recomendaría?

Tenga en cuenta que la facilidad de configuración podría ser un factor, estoy bastante cómodo con Apache pero solo he jugado con Node y nunca he instalado Nginx.

Estaré encantado de proporcionarle aclaraciones si alguien las necesita.

+0

Esto puede ser una pregunta para http: //webmasters.stackexchange.com/... – DaveRandom

+0

Lo consideré ... Supongo que se basa más en la configuración. – thelastshadow

Respuesta

1

Yo, personalmente usaría solamente Node.js. En lugar de una encuesta larga, puede enviar nueva información a todos los clientes disponibles. Node.JS es extremadamente rápido al entregar contenido en tiempo real y es capaz de hacer todo en un solo paquete. Además, el lado del cliente y el lado del servidor está escrito en JavaScript, lo que facilita el desarrollo, la depuración y la entrega. Como desarrollador puede ver los beneficios de esto.

Aquí hay un ejemplo de una aplicación que usa Node.js y los módulos express, jade y NowJS. Por supuesto, esto también se puede usar como una combinación con su CMS ejecutándose en Apache y Node.JS sirviendo el contenido dinámico. con Nginx o un script de nodo actuando como un proxy inverso en frente de este script y Apache.

Una simple aplicación de chat

Server.js

var express = require('express') 
    , app = express.createServer() 
    , nowjs = require('now') 

/* configure express server */ 
//... 

app.get('/', function(req, res){ 
    res.render('chat') 
}) 

var everyone = nowjs.initialize(app) 

// Server scoped function called by single client 
everyone.now.distributeMsg = function(msg){ 
    // Client scoped function of every connected client 
    this.now.receiveMsg(msg) 
} 

app.listen(3000) 

chat.jade

!!! 
html 
    head 
    script(type='text/javascript', src='/nowjs/now.js') 
    body 
    #log 
    input#entry(type='text') 
    input#submit(type='button') 

script 
    $(function(){ 
    $('#submit').click(function(){ 
     now.distributeMsg($('#entry').val()) 
    }) 

    now.receiveMsg = function(msg){ 
     $('#log').append('<div>' + msg + '</div>') 
    } 
    }) 

Sí, realmente es así de simple y no tomaría muchos más líneas de código para convertir esto en una aplicación de chat con todas las funciones. De hecho, su marcado y CSS tomarían más líneas que el código de la aplicación. ¡Asombroso!

+1

Me gusta Node y ciertamente me complace crear la aplicación en él. – thelastshadow

3

me gustaría utilizar la opción C: y sugeriría una opción D:

la opción D:

  • Keepalived con HAProxy para equilibrar la carga (LB)
  • Nginx para scripts estáticas y PHP, usando PHP-FPM, APC y Redis para almacenar en caché
  • Node.js (y otros módulos de nodo) para dinámico, contenido en tiempo real

Actualmente utilizamos las primeras 2 partes de la opción D, provenientes de un fondo LAMP, y actualmente estamos implementando Node.js para servir algunas de nuestras aplicaciones en tiempo real (que gravan el sistema). HAProxy hace exactamente eso: envía el tráfico a todos mis servidores backend, en lugar de tener que hacerlo con Nginx. Motivo de ello, tenemos muchos servidores back-end HTTP/TCP/y requerimos conmutación por error redundante y automática a estos servidores. LB es simple de implementar y funciona bien.

Hasta ahora, excelentes resultados. Personalmente, la curva de aprendizaje de los Nodos hasta ahora ha sido difícil debido a la falta de documentación, pero existe una comunidad muy dinámica.

Espero que esto ayude.

Cuestiones relacionadas