Por ejemplo tenemos este código simple:
var http = require('http'); var express = require('express'); var app = express(); var server = http.createServer(app); var io = require('socket.io').listen(server); server.listen(80); Cuando / se carga y se presiona el botón de start a través de la solicitud socket.io enviada, que comienza con cosas pesadas en el back-end (muchas solicitudes http diferentes que pueden ser de 5 a 10 segundos) y cuando llega la respuesta, se devuelve inmediatamente al navegador.
Entonces, la pregunta principal: ¿debería dividir la aplicación en dos partes?
Socket.IO como un procesoExpress como segundo proceso Soy consciente de que cuando lleguen las solicitudes largas, bloqueará Express . Por ejemplo, cuando un usuario busca otros sitios, el sitio estará inactivo mientras haya solicitudes largas en curso.
Solo hay una respuesta definitiva sobre uno frente a dos procesos al comprender completamente y probablemente perfilar/probar su código y clientes reales. Si su código node.js (ya sean solicitudes http regulares o solicitudes socket.io) utiliza correctamente E/S sin bloqueo y no requiere un uso intensivo de la CPU, entonces puede enviar una cantidad sorprendentemente alta de solicitudes con un solo proceso. Esa es una ventaja principal de la arquitectura node.js.
Si, por otro lado, tiene un cálculo intensivo de CPU como parte de la mayoría de las solicitudes, entonces es posible que desee agrupar toda su aplicación. Recomendaría agrupar en clústeres en lugar de dividir socket.io de http porque eso le brinda múltiples CPU para trabajar en sus solicitudes de socket.io o sus solicitudes de http.