出力:

サーバーが実行され、複数のブラウザで HTML ファイルを開くと、1 つのブラウザに入力されたメッセージがサーバーに送信され、接続されているすべてのクライアントにブロードキャストされます。

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

結論

WebSocket と Socket.IO は、最新の Web アプリケーションに不可欠なリアルタイムの双方向通信を提供します。 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"}}
「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > WebSocket、Socket.IO、Node.js によるリアルタイム通信

WebSocket、Socket.IO、Node.js によるリアルタイム通信

2024 年 11 月 2 日に公開
ブラウズ:308

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

リアルタイム通信は最新のアプリケーションの重要な機能となっており、即時更新、ライブ データ交換、応答性の高いユーザー エクスペリエンスを可能にします。 WebSocket や Socket.IO などのテクノロジーは、リアルタイム インタラクションの最前線にあります。この記事では、WebSocket の概念、WebSocket を Node.js で実装する方法、および Socket.IO がリアルタイム通信を簡素化する方法について詳しく説明します。

WebSocketとは何ですか?

WebSocket は、単一の TCP 接続上で全二重通信チャネルを提供する通信プロトコルです。要求/応答モデルで動作する HTTP プロトコルとは異なり、WebSocket を使用すると、サーバーとクライアントがいつでもメッセージを相互に送信し、オープンな接続を維持できます。

主な特徴:

  • 永続的な接続: WebSocket は接続を開いたままにし、接続を再確立する必要性を減らします。
  • 双方向通信: サーバーとクライアントの両方が自由にメッセージを送信できます。
  • 低遅延: WebSocket はオープンな接続を維持するため、HTTP リクエストのオーバーヘッドが排除され、遅延が減少します。

WebSocket をいつ使用するか?

WebSocket は、リアルタイムの低遅延データ交換を必要とするアプリケーションに最適です:

  • チャット アプリケーション (例: Slack、WhatsApp Web)
  • スポーツのライブ最新情報
  • 株式市場フィード
  • リアルタイム コラボレーション ツール (例: Google ドキュメント)

Node.js で WebSocket を設定する

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 は、リアルタイム通信を簡素化する WebSocket 上に構築された人気のあるライブラリです。これにより、より高いレベルの抽象化が提供され、リアルタイム イベントの実装と管理が容易になります。 Socket.IO は、WebSocket をサポートしていないブラウザのフォールバック メカニズムもサポートし、幅広い互換性を確保します。

Socket.IO の利点:

  • 自動再接続: 接続が失われた場合に自動的に再接続を試みます。
  • 名前空間とルーム: 接続を名前空間とルームに整理し、より構造化されたコミュニケーションを可能にします。
  • イベント駆動型モデル: カスタム イベントをサポートし、通信をよりセマンティックにします。

Node.js での Socket.IO の使用

ステップ 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 が接続されます。
  • 接続イベントは新しいクライアント接続を処理します。
  • チャット イベントはチャット メッセージを送信するためのカスタム イベントであり、すべてのクライアントにメッセージをブロードキャストします。

ステップ 3: Socket.IO クライアントを作成する



    Socket.IO Chat
    

    出力:

    サーバーが実行され、複数のブラウザで HTML ファイルを開くと、1 つのブラウザに入力されたメッセージがサーバーに送信され、接続されているすべてのクライアントにブロードキャストされます。

    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 アプリケーションは垂直方向または水平方向にスケーリングできます:

    • 垂直スケーリング: 単一マシンのリソース (CPU、RAM) を増加します。
    • 水平スケーリング: 異なるマシンまたはコア間で 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);
    }
    

    結論

    WebSocket と Socket.IO は、最新の Web アプリケーションに不可欠なリアルタイムの双方向通信を提供します。 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