Producción:

Una vez que el servidor se esté ejecutando y abra el archivo HTML en varios navegadores, los mensajes escritos en un navegador se enviarán al servidor y se transmitirán a todos los clientes conectados.

Secuencias de Node.js

Las transmisiones son esenciales para manejar archivos grandes o datos en fragmentos en lugar de cargar todo el contenido en la memoria. Son útiles para:

Tipos de transmisiones en Node.js:

  1. Secuencias legibles: secuencias desde las cuales se pueden leer datos (por ejemplo, lectura del sistema de archivos).
  2. Secuencias de escritura: secuencias en las que se pueden escribir datos (por ejemplo, escritura en el sistema de archivos).
  3. Transmisiones dúplex: transmisiones que se pueden leer y escribir (por ejemplo, sockets TCP).
  4. Transformar flujos: flujos que pueden modificar o transformar datos a medida que se escriben y leen (por ejemplo, compresión de archivos).

Ejemplo: leer un archivo usando secuencias

const fs = require(\\'fs\\');// Create a readable streamconst readStream = fs.createReadStream(\\'largefile.txt\\', \\'utf8\\');// Listen to \\'data\\' event to read chunks of datareadStream.on(\\'data\\', (chunk) => {    console.log(\\'Reading chunk:\\', chunk);});// Listen to \\'end\\' event when the file is fully readreadStream.on(\\'end\\', () => {    console.log(\\'File reading complete\\');});

Escalado de aplicaciones Node.js

A medida que su aplicación crece, es necesario ampliarla para manejar el aumento del tráfico y garantizar una alta disponibilidad. Las aplicaciones Node.js se pueden escalar vertical u horizontalmente:

Módulo de clúster en Node.js

Node.js se ejecuta en un solo subproceso, pero al utilizar el módulo de clúster, puede aprovechar los sistemas multinúcleo ejecutando múltiples procesos de Node.js.

const cluster = require(\\'cluster\\');const http = require(\\'http\\');const numCPUs = require(\\'os\\').cpus().length;if (cluster.isMaster) {    // Fork workers for each CPU    for (let i = 0; i < numCPUs; i  ) {        cluster.fork();    }    cluster.on(\\'exit\\', (worker, code, signal) => {        console.log(`Worker ${worker.process.pid} died`);    });} else {    // Workers can share the same HTTP server    http.createServer((req, res) => {        res.writeHead(200);        res.end(\\'Hello, world!\\\\n\\');    }).listen(8000);}

Conclusión

WebSockets y Socket.IO ofrecen comunicación bidireccional en tiempo real esencial para las aplicaciones web modernas. Los flujos de Node.js manejan de manera eficiente datos a gran escala, y el escalado con NGINX y el módulo de clúster de Node garantiza que su aplicación pueda administrar un tráfico intenso. Juntas, estas tecnologías permiten aplicaciones sólidas y de alto rendimiento en tiempo real.

","image":"http://www.luping.net/uploads/20240927/172744885266f6c714068ca.jpg","datePublished":"2024-11-02T05:36:07+08:00","dateModified":"2024-11-02T05:36:07+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > WebSockets, Socket.IO y comunicación en tiempo real con Node.js

WebSockets, Socket.IO y comunicación en tiempo real con Node.js

Publicado el 2024-11-02
Navegar:942

WebSockets, Socket.IO, and Real-Time Communication with Node.js

La comunicación en tiempo real se ha convertido en una característica clave de las aplicaciones modernas, lo que permite actualizaciones instantáneas, intercambio de datos en vivo y experiencias de usuario receptivas. Tecnologías como WebSockets y Socket.IO están a la vanguardia de las interacciones en tiempo real. Este artículo profundizará en los conceptos de WebSockets, cómo implementarlos en Node.js y cómo Socket.IO simplifica la comunicación en tiempo real.

¿Qué es WebSocket?

WebSocket es un protocolo de comunicación que proporciona canales de comunicación full-duplex a través de una única conexión TCP. A diferencia del protocolo HTTP, que opera en un modelo de solicitud-respuesta, WebSocket permite que el servidor y el cliente se envíen mensajes entre sí en cualquier momento, manteniendo una conexión abierta.

Características clave:

  • Conexión persistente: WebSocket mantiene la conexión abierta, lo que reduce la necesidad de restablecer las conexiones.
  • Comunicación bidireccional: Tanto el servidor como el cliente pueden enviar mensajes libremente.
  • Baja latencia: dado que WebSocket mantiene una conexión abierta, elimina la sobrecarga de las solicitudes HTTP, lo que reduce la latencia.

¿Cuándo utilizar WebSockets?

Los WebSockets son ideales para aplicaciones que requieren intercambio de datos de baja latencia y en tiempo real:

  • Aplicaciones de chat (p. ej., Slack, WhatsApp Web)
  • Actualizaciones deportivas en vivo
  • Feeds del mercado de valores
  • Herramientas de colaboración en tiempo real (p. ej., Google Docs)

Configurar WebSocket en Node.js

Node.js admite de forma nativa WebSocket a través del paquete ws, una biblioteca liviana y eficiente para la comunicación WebSocket.

Paso 1: instale el paquete WebSocket

npm install ws

Paso 2: crear un servidor WebSocket

const WebSocket = require('ws');

// Create a WebSocket server that listens on port 8080
const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', (ws) => {
    console.log('Client connected');

    // When the server receives a message
    ws.on('message', (message) => {
        console.log('Received:', message);
        // Echo the message back to the client
        ws.send(`Server received: ${message}`);
    });

    // Handle connection close
    ws.on('close', () => {
        console.log('Client disconnected');
    });
});

console.log('WebSocket server is running on ws://localhost:8080');

Explicación:

  • Un servidor WebSocket escucha en el puerto 8080.
  • El evento de conexión se activa cuando un cliente se conecta.
  • El evento de mensaje se activa cuando el servidor recibe datos del cliente, que luego repite.

Paso 3: cree un cliente WebSocket

const ws = new WebSocket('ws://localhost:8080');

ws.on('open', () => {
    console.log('Connected to WebSocket server');
    // Send a message to the server
    ws.send('Hello Server!');
});

ws.on('message', (data) => {
    console.log('Received from server:', data);
});

ws.on('close', () => {
    console.log('Disconnected from server');
});

Producción:

Server Console:
Client connected
Received: Hello Server!
Client disconnected

Client Console:
Connected to WebSocket server
Received from server: Server received: Hello Server!
Disconnected from server

¿Qué es Socket.IO?

Socket.IO es una biblioteca popular construida sobre WebSockets que simplifica la comunicación en tiempo real. Proporciona una abstracción de nivel superior, lo que facilita la implementación y gestión de eventos en tiempo real. Socket.IO también admite mecanismos alternativos para navegadores que no admiten WebSockets, lo que garantiza una amplia compatibilidad.

Ventajas de Socket.IO:

  • Reconexión automática: Intenta reconectarse automáticamente si se pierde la conexión.
  • Espacio de nombres y salas: organiza las conexiones en espacios de nombres y salas, lo que permite una comunicación más estructurada.
  • Modelo basado en eventos: admite eventos personalizados, lo que hace que la comunicación sea más semántica.

Usando Socket.IO con Node.js

Paso 1: Instale Socket.IO

npm install socket.io

Paso 2: configurar un servidor Socket.IO

const http = require('http');
const socketIo = require('socket.io');

// Create an HTTP server
const server = http.createServer();
const io = socketIo(server, {
    cors: {
        origin: "*",
        methods: ["GET", "POST"]
    }
});

// Handle client connection
io.on('connection', (socket) => {
    console.log('Client connected:', socket.id);

    // Listen for 'chat' events from the client
    socket.on('chat', (message) => {
        console.log('Received message:', message);
        // Broadcast the message to all connected clients
        io.emit('chat', `Server: ${message}`);
    });

    // Handle client disconnect
    socket.on('disconnect', () => {
        console.log('Client disconnected:', socket.id);
    });
});

server.listen(3000, () => {
    console.log('Socket.IO server running on http://localhost:3000');
});

Explicación:

  • Se crea un servidor HTTP y se le adjunta Socket.IO.
  • El evento de conexión maneja nuevas conexiones de clientes.
  • El evento de chat es un evento personalizado para enviar mensajes de chat y emitir los mensajes a todos los clientes.

Paso 3: cree un cliente Socket.IO



    
    Socket.IO Chat


    
    
    

    Producción:

    Una vez que el servidor se esté ejecutando y abra el archivo HTML en varios navegadores, los mensajes escritos en un navegador se enviarán al servidor y se transmitirán a todos los clientes conectados.

    Secuencias de Node.js

    Las transmisiones son esenciales para manejar archivos grandes o datos en fragmentos en lugar de cargar todo el contenido en la memoria. Son útiles para:

    • Cargas/descargas de archivos: Las transmisiones le permiten procesar datos a medida que se cargan o descargan.
    • Manejo de datos de gran tamaño: Las transmisiones son más eficientes en cuanto a memoria para manejar archivos grandes o datos continuos.

    Tipos de transmisiones en Node.js:

    1. Secuencias legibles: secuencias desde las cuales se pueden leer datos (por ejemplo, lectura del sistema de archivos).
    2. Secuencias de escritura: secuencias en las que se pueden escribir datos (por ejemplo, escritura en el sistema de archivos).
    3. Transmisiones dúplex: transmisiones que se pueden leer y escribir (por ejemplo, sockets TCP).
    4. Transformar flujos: flujos que pueden modificar o transformar datos a medida que se escriben y leen (por ejemplo, compresión de archivos).

    Ejemplo: leer un archivo usando secuencias

    const fs = require('fs');
    
    // Create a readable stream
    const readStream = fs.createReadStream('largefile.txt', 'utf8');
    
    // Listen to 'data' event to read chunks of data
    readStream.on('data', (chunk) => {
        console.log('Reading chunk:', chunk);
    });
    
    // Listen to 'end' event when the file is fully read
    readStream.on('end', () => {
        console.log('File reading complete');
    });
    

    Escalado de aplicaciones Node.js

    A medida que su aplicación crece, es necesario ampliarla para manejar el aumento del tráfico y garantizar una alta disponibilidad. Las aplicaciones Node.js se pueden escalar vertical u horizontalmente:

    • Escalado vertical: Incrementar los recursos (CPU, RAM) de una sola máquina.
    • Escalado horizontal: ejecutar múltiples instancias de su aplicación Node.js en diferentes máquinas o núcleos.

    Módulo de clúster en Node.js

    Node.js se ejecuta en un solo subproceso, pero al utilizar el módulo de clúster, puede aprovechar los sistemas multinúcleo ejecutando múltiples procesos de Node.js.

    const cluster = require('cluster');
    const http = require('http');
    const numCPUs = require('os').cpus().length;
    
    if (cluster.isMaster) {
        // Fork workers for each CPU
        for (let i = 0; i  {
            console.log(`Worker ${worker.process.pid} died`);
        });
    } else {
        // Workers can share the same HTTP server
        http.createServer((req, res) => {
            res.writeHead(200);
            res.end('Hello, world!\n');
        }).listen(8000);
    }
    

    Conclusión

    WebSockets y Socket.IO ofrecen comunicación bidireccional en tiempo real esencial para las aplicaciones web modernas. Los flujos de Node.js manejan de manera eficiente datos a gran escala, y el escalado con NGINX y el módulo de clúster de Node garantiza que su aplicación pueda administrar un tráfico intenso. Juntas, estas tecnologías permiten aplicaciones sólidas y de alto rendimiento en tiempo real.

    Declaración de liberación Este artículo se reproduce en: https://dev.to/imsushant12/websockets-socketio-and-real-time-communication-with-nodejs-4ea0?1 Si hay alguna infracción, comuníquese con [email protected] para eliminar él
    Último tutorial Más>

    Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

    Copyright© 2022 湘ICP备2022001581号-3