tiempo real notificaciones nodejs node mega español ejemplos con aplicaciones aplicacion node.js express

node.js - real - nodejs pdf español



¿Por qué las diferentes sesiones de node.js comparten variables? (4)

Aquí hay un programa simple:

var express = require(''express''); var app = express.createServer(); var count = 0; app.get("/", function(req, res) { res.send(count.toString()); count++; }); app.listen(3000);

Cuando lo abro en dos navegadores diferentes, el primero muestra 0 y el segundo muestra 1 .

¿Por qué? Son sesiones diferentes, por lo que espero que node.js use diferentes procesos secundarios para ellas. Mi entendimiento, con PHP, es que las variables de intercambio deben implementarse usando bases de datos.

¿Por qué node.js puede hacer esto sin ningún almacenamiento externo? ¿Es un proceso único pero múltiples hilos?

¿Cómo declaro una variable que pertenece a una sesión específica?


Node.js es un proceso único.

Su código se ejecuta en un solo proceso ontop de eventloop.

JavaScript tiene un solo hilo. Cada pieza de código que ejecuta es de un solo hilo. Node.js es rápido y escala porque no bloquea en IO (IO es el cuello de la botella).

Básicamente, cualquier javascript que ejecute es de un solo hilo. JavaScript es inherentemente de un solo hilo.

Cuando llamas a partes de la API de nodeJS, utiliza el subprocesamiento internamente en el nivel de C ++ para asegurarte de que puede enviarte las solicitudes entrantes para los servidores HTTP o enviarte los archivos para el acceso al archivo. Esto le permite usar IO asincrónico

En cuanto a las sesiones

app.use(express.session({ secret: "Some _proper_ secret" })); ... app.get("/", function(req, res) { if (req.session.count == null) { req.session.count = 0; } res.send(req.session.count); req.session.count++; });


node.js es esencialmente de subproceso único, en realidad.

Cada solicitud a un script PHP es manejada por una instancia separada de PHP, pero se ejecuta dentro del mismo proceso de servidor (a menudo Apache).

Un script node.js es tanto el servidor como el manejador en uno. Como el servidor mantiene el estado, se conserva entre solicitudes. Para la persistencia a largo plazo, querrás usar una base de datos como en PHP. Sin embargo, si desea implementar un servidor de chat o algo donde la memoria a largo plazo no es importante, mantener todo en la memoria del servidor puede simplificar las cosas.


El ''problema'' que estás viendo no es específico del nodo. Es solo una función de scoping en javascript. Has declarado tu variable bajo un alcance que vive durante la vida del servidor, no la solicitud.

Declarar su variable dentro de la función utilizada para responder a su ruta resolverá su problema:

var express = require(''express''); var app = express.createServer(); app.get("/", function(req, res) { var count = 0; res.send(count.toString()); count++; }); app.listen(3000);


Node.js tiene un solo subproceso, lo que puede reducir la sobrecarga de la creación de procesos / hilos secundarios. Y utiliza las funciones y callbacks de asyn para que Node pueda manejar otras solicitudes cuando la anterior está bloqueada, y proporciona un buen rendimiento cuando la aplicación se enfoca en el tráfico pesado de datos pero no en el cómputo.

Es un poco como el concepto de programación funcional, necesita manejar la variable cuidadosamente.
Debe usar el cierre para crear un espacio para cada solicitud si lo desea. Pero tenga en cuenta que el cierre no puede ser optimizado por el motor JS fácilmente.