Выход:

После запуска сервера и открытия HTML-файла в нескольких браузерах сообщения, введенные в одном браузере, будут отправляться на сервер и транслироваться всем подключенным клиентам.

Потоки Node.js

Потоки необходимы для обработки больших файлов или данных частями, а не для загрузки всего содержимого в память. Они полезны для:

Типы потоков в Node.js:

  1. Читаемые потоки: потоки, из которых можно читать данные (например, чтение файловой системы).
  2. Потоки с возможностью записи: потоки, в которые можно записывать данные (например, запись в файловую систему).
  3. Дуплексные потоки: потоки, которые можно как читать, так и записывать (например, TCP-сокеты).
  4. Потоки преобразования: потоки, которые могут изменять или преобразовывать данные при их записи и чтении (например, сжатие файлов).

Пример: чтение файла с использованием потоков

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\\');});

Масштабирование приложений Node.js

По мере роста вашего приложения становится необходимым масштабирование для обработки растущего трафика и обеспечения высокой доступности. Приложения Node.js можно масштабировать вертикально или горизонтально:

Модуль кластера в Node.js

Node.js работает в одном потоке, но с помощью модуля кластера вы можете воспользоваться преимуществами многоядерных систем, запустив несколько процессов 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);}

Заключение

WebSockets и Socket.IO обеспечивают двунаправленную связь в реальном времени, необходимую для современных веб-приложений. Потоки Node.js эффективно обрабатывают большие объемы данных, а масштабирование с помощью NGINX и модуля кластера Node гарантирует, что ваше приложение сможет справиться с интенсивным трафиком. Вместе эти технологии позволяют создавать надежные и высокопроизводительные приложения реального времени.

","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"}}
«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > WebSockets, Socket.IO и общение в реальном времени с Node.js

WebSockets, Socket.IO и общение в реальном времени с Node.js

Опубликовано 2 ноября 2024 г.
Просматривать:946

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

Общение в режиме реального времени стало ключевой функцией современных приложений, обеспечивающей мгновенные обновления, обмен данными в реальном времени и оперативное взаимодействие с пользователем. Такие технологии, как WebSockets и Socket.IO, находятся на переднем крае взаимодействия в реальном времени. В этой статье мы углубимся в концепции WebSockets, способы их реализации в Node.js и то, как Socket.IO упрощает общение в реальном времени.

Что такое вебсокет?

WebSocket — это протокол связи, который обеспечивает полнодуплексные каналы связи через одно TCP-соединение. В отличие от протокола HTTP, который работает по модели запрос-ответ, WebSocket позволяет серверу и клиенту отправлять сообщения друг другу в любое время, поддерживая открытое соединение.

Основные характеристики:

  • Постоянное соединение: WebSocket сохраняет соединение открытым, уменьшая необходимость повторного установления соединения.
  • Двунаправленная связь: и сервер, и клиент могут свободно отправлять сообщения.
  • Низкая задержка: поскольку WebSocket поддерживает открытое соединение, он устраняет накладные расходы HTTP-запросов, уменьшая задержку.

Когда использовать WebSockets?

WebSockets идеально подходят для приложений, которым требуется обмен данными в режиме реального времени с малой задержкой:

  • Приложения чата (например, Slack, WhatsApp Web)
  • Спортивные новости в прямом эфире
  • Новости фондового рынка
  • Инструменты для совместной работы в режиме реального времени (например, Документы Google)

Настройка WebSocket в Node.js

Node.js изначально поддерживает WebSocket через пакет ws, легкую и эффективную библиотеку для взаимодействия через WebSocket.

Шаг 1. Установите пакет WebSocket.

npm install ws

Шаг 2. Создайте сервер 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');

Объяснение:

  • Сервер WebSocket прослушивает порт 8080.
  • Событие подключения запускается при подключении клиента.
  • Событие сообщения запускается, когда сервер получает данные от клиента, которые затем возвращаются обратно.

Шаг 3. Создайте клиент 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');
});

Выход:

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

Что такое Socket.IO?

Socket.IO — популярная библиотека, созданная на основе WebSockets и упрощающая общение в реальном времени. Он обеспечивает абстракцию более высокого уровня, упрощая реализацию событий в реальном времени и управление ими. Socket.IO также поддерживает резервные механизмы для браузеров, которые не поддерживают WebSockets, обеспечивая широкую совместимость.

Преимущества Socket.IO:

  • Автоматическое переподключение: автоматически пытается переподключиться, если соединение потеряно.
  • Пространство имен и комнаты: организует соединения в пространства имен и комнаты, обеспечивая более структурированное общение.
  • Модель, управляемая событиями: поддерживает пользовательские события, что делает общение более семантическим.

Использование Socket.IO с Node.js

Шаг 1. Установите Socket.IO

npm install socket.io

Шаг 2. Настройка сервера 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');
});

Объяснение:

  • Создан HTTP-сервер и к нему подключен Socket.IO.
  • Событие подключения обрабатывает новые клиентские подключения.
  • Событие чата — это настраиваемое событие для отправки сообщений чата, которое Emit передает сообщения всем клиентам.

Шаг 3. Создайте клиент Socket.IO



    Socket.IO Chat
    

    Выход:

    После запуска сервера и открытия HTML-файла в нескольких браузерах сообщения, введенные в одном браузере, будут отправляться на сервер и транслироваться всем подключенным клиентам.

    Потоки Node.js

    Потоки необходимы для обработки больших файлов или данных частями, а не для загрузки всего содержимого в память. Они полезны для:

    • Загрузка/загрузка файлов: потоки позволяют обрабатывать данные по мере их загрузки или загрузки.
    • Обработка больших данных: потоки более эффективно используют память для обработки больших файлов или непрерывных данных.

    Типы потоков в Node.js:

    1. Читаемые потоки: потоки, из которых можно читать данные (например, чтение файловой системы).
    2. Потоки с возможностью записи: потоки, в которые можно записывать данные (например, запись в файловую систему).
    3. Дуплексные потоки: потоки, которые можно как читать, так и записывать (например, TCP-сокеты).
    4. Потоки преобразования: потоки, которые могут изменять или преобразовывать данные при их записи и чтении (например, сжатие файлов).

    Пример: чтение файла с использованием потоков

    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');
    });
    

    Масштабирование приложений Node.js

    По мере роста вашего приложения становится необходимым масштабирование для обработки растущего трафика и обеспечения высокой доступности. Приложения Node.js можно масштабировать вертикально или горизонтально:

    • Вертикальное масштабирование: увеличение ресурсов (ЦП, ОЗУ) одной машины.
    • Горизонтальное масштабирование: запуск нескольких экземпляров приложения Node.js на разных компьютерах или ядрах.

    Модуль кластера в Node.js

    Node.js работает в одном потоке, но с помощью модуля кластера вы можете воспользоваться преимуществами многоядерных систем, запустив несколько процессов 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);
    }
    

    Заключение

    WebSockets и Socket.IO обеспечивают двунаправленную связь в реальном времени, необходимую для современных веб-приложений. Потоки Node.js эффективно обрабатывают большие объемы данных, а масштабирование с помощью NGINX и модуля кластера Node гарантирует, что ваше приложение сможет справиться с интенсивным трафиком. Вместе эти технологии позволяют создавать надежные и высокопроизводительные приложения реального времени.

    Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/imsushant12/websockets-socketio-and-real-time-communication-with-nodejs-4ea0?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить это
    Последний учебник Более>

    Изучайте китайский

    Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

    Copyright© 2022 湘ICP备2022001581号-3