ホームページ >ウェブフロントエンド >jsチュートリアル >Node.js での WebSocket とリアルタイム通信の操作

Node.js での WebSocket とリアルタイム通信の操作

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-16 12:01:03794ブラウズ

Working with WebSocket and Real-Time Communication in Node.js

最新のアプリケーションでは、特にライブ チャット、通知、共同作業ツールなどの機能において、リアルタイムのコミュニケーションが重要です。 WebSocket は、単一の長期接続を介してクライアントとサーバー間の双方向通信を可能にするプロトコルです。この記事では、WebSocket、Node.js での WebSocket の実装、およびリアルタイム アプリケーションでの WebSocket の使用を簡素化する人気のあるライブラリである Socket.IO の役割について説明します。

WebSocket: 何を、なぜ、どのように?

WebSocket は、永続的な接続を維持するプロトコルであり、HTTP の一定の要求と応答のサイクルを必要とせずにデータ交換を可能にします。いくつかの使用例は次のとおりです:

  • ライブメッセージング アプリケーション (チャット ルームなど)
  • リアルタイム更新が必要なオンライン ゲーム
  • ソーシャルメディアアプリケーションでのイベントの通知
  • 共同作業ツール (例: Google ドキュメント)

WebSocket の仕組み

  1. クライアントはサーバーとの HTTP 接続を確立します。
  2. サーバーはこの接続を WebSocket プロトコルにアップグレードします。
  3. クライアントとサーバーの両方が、この永続的な接続を介してリアルタイムでメッセージを送受信できるようになります。

Node.j での WebSocket の実装

ws を使用した基本的な WebSocket サーバー

ws パッケージを使用して簡単な WebSocket サーバーを構築しましょう。

ステップ 1: ws をインストールします:

npm install ws

ステップ 2: WebSocket サーバーを作成します:

const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080 });

server.on('connection', (socket) => {
  console.log('Client connected');

  // Listening for messages from the client
  socket.on('message', (message) => {
    console.log(`Received message: ${message}`);
    // Echo message back to client
    socket.send(`Server: ${message}`);
  });

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

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

ステップ 3: クライアント側からの接続:

<script>
  const socket = new WebSocket('ws://localhost:8080');

  socket.onopen = () => {
    console.log('Connected to server');
    socket.send('Hello Server!');
  };

  socket.onmessage = (event) => {
    console.log(`Received from server: ${event.data}`);
  };
</script>

Socket.IO の紹介: WebSocket 管理の簡素化

Socket.IO は、リアルタイム通信を簡素化し、自動再接続やブロードキャストなどの機能を追加するライブラリです。

Socket.IO のインストール

npm install socket.io

Socket.IO を使用したリアルタイム チャット アプリケーションの構築

サーバー側の実装:

const express = require('express');
const http = require('http');
const { Server } = require('socket.io');

const app = express();
const server = http.createServer(app);
const io = new Server(server);

io.on('connection', (socket) => {
  console.log('A user connected');

  socket.on('chat message', (msg) => {
    // Broadcast message to all connected clients
    io.emit('chat message', msg);
  });

  socket.on('disconnect', () => {
    console.log('User disconnected');
  });
});

server.listen(3000, () => {
  console.log('Server is listening on http://localhost:3000');
});

クライアント側の実装:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Real-Time Chat</title>
</head>
<body>
  <h1>Chat Room</h1>
  <input>



<h2>
  
  
  Node.js Streams: Efficient Data Handling
</h2>

<p>Node.js streams provide a way to process data piece by piece, which is particularly useful for handling large files.</p>

<h3>
  
  
  Types of Streams
</h3>

<ol>
<li>
<strong>Readable</strong>: For reading data from a source.</li>
<li>
<strong>Writable</strong>: For writing data to a destination.</li>
<li>
<strong>Duplex</strong>: For both reading and writing.</li>
<li>
<strong>Transform</strong>: For modifying or transforming data as it’s read or written.</li>
</ol>

<h3>
  
  
  Example: Reading a Large File with Streams
</h3>



<pre class="brush:php;toolbar:false">const fs = require('fs');

const readStream = fs.createReadStream('largefile.txt', { encoding: 'utf8' });

readStream.on('data', (chunk) => {
  console.log('New chunk received:', chunk);
});

readStream.on('end', () => {
  console.log('File reading completed');
});

Node.js アプリケーションのスケーリング

Node.js アプリケーションをスケーリングすると、リソースを追加して増加した負荷を確実に処理できるようになります。

水平方向のスケーリング

  • アプリケーションの複数のインスタンスをデプロイし、リクエストの負荷を分散します。

垂直スケーリング

  • より多くのリクエストを処理するには、サーバーの能力 (CPU、メモリ) を増やします。

NGINX: 負荷分散と静的コンテンツの提供

NGINX は、負荷分散、キャッシュ、静的コンテンツの提供によく使用される Web サーバーです。

例: NGINX を使用した静的ファイルの提供

  1. NGINX をインストールします
npm install ws
  1. NGINX を構成する

/etc/nginx/sites-available/default を編集します:

const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080 });

server.on('connection', (socket) => {
  console.log('Client connected');

  // Listening for messages from the client
  socket.on('message', (message) => {
    console.log(`Received message: ${message}`);
    // Echo message back to client
    socket.send(`Server: ${message}`);
  });

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

console.log('WebSocket server is running on ws://localhost:8080');
  1. NGINX を開始します
<script>
  const socket = new WebSocket('ws://localhost:8080');

  socket.onopen = () => {
    console.log('Connected to server');
    socket.send('Hello Server!');
  };

  socket.onmessage = (event) => {
    console.log(`Received from server: ${event.data}`);
  };
</script>

SSLとセキュリティ

SSL はクライアントとサーバー間のデータを暗号化し、セキュリティ層を追加します。 SSL を設定するには:

  1. SSL 証明書を生成します (またはプロバイダーから取得します)。
  2. SSL を使用するように NGINX を構成します:
npm install socket.io

結論

この記事では、実稼働レベルのデプロイメントのための Node.js アプリケーションのリアルタイム通信、効率的なデータ処理、スケーリング、およびセキュリティ保護の本質を検討しました。 WebSocket、Socket.IO、NGINX、Node.js ストリームは、アプリケーションの対話性、データ管理、セキュリティを強化して、ユーザー エクスペリエンスとスケーラビリティを向上させる強力なツールです。

以上がNode.js での WebSocket とリアルタイム通信の操作の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。