Nodejsで長い接続を実装する方法

PHPz
リリース: 2023-04-06 10:36:55
オリジナル
2269 人が閲覧しました

Node.js は、非常に人気のあるサーバーサイド JavaScript ランタイム環境です。ネットワーク プログラミング、特に長時間接続の実装に優れています。

ネットワーク プログラミングでは、長い接続とは、クライアントとサーバーがハートビート アクティビティを維持し、接続を閉じない状態を指します。従来の HTTP 要求/応答モデルと比較して、接続が長いと、ネットワーク効率とシステム パフォーマンスが向上します。たとえば、クライアントとサーバー間の長い接続を介してデータを送受信する場合、接続の確立と切断のオーバーヘッドが削減され、結果として生じるネットワーク遅延とシステム リソースの浪費を回避できます。

それでは、Node.js で長い接続を実装するにはどうすればよいでしょうか?

1. WebSocket の使用

WebSocket は、全二重通信を実現するために TCP プロトコルに基づいて構築されたプロトコルです。これは、クライアントとサーバーの間に長い接続を確立する方法を提供し、クライアントの要求とサーバーの応答だけでなく双方向の通信を可能にします。

Node.js では、ws ライブラリを使用して WebSocket 接続を実装できます。以下は簡単な WebSocket の例です:

const WebSocket = require('ws');

const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) {
  console.log('client connected');

  ws.on('message', function incoming(message) {
    console.log('received: %s', message);
  });

  ws.on('close', function close() {
    console.log('client disconnected');
  });
});
ログイン後にコピー

この例では、ポート 8080 でリッスンする WebSocket サーバーを作成します。クライアントがサーバーに接続すると、WebSocket サーバーはイベント ハンドラーを通じて接続コールバック関数を呼び出します。このコールバック関数では、クライアントから送信されたメッセージを受信するためのメッセージ イベント ハンドラーを登録できます。また、クライアントが切断されたときに処理する close イベント ハンドラーも登録しました。

2. TCP ソケットの使用

TCP ソケットは Node.js の基本モジュールで、TCP プロトコルのソケット通信を実装するために使用されます。 Node.jsではnetモジュールを使用してTCPソケットを操作できます。

以下は簡単な TCP ソケットの例です:

const net = require('net');

const server = net.createServer(function(socket) {
  console.log('client connected');

  socket.on('data', function(data) {
    console.log('received: ' + data);
  });

  socket.on('end', function() {
    console.log('client disconnected');
  });
});

server.listen(8080, function() {
  console.log('server started');
});
ログイン後にコピー

この例では、ポート 8080 でリッスンする TCP ソケット サーバーを作成します。クライアントがサーバーに接続すると、ログを出力し、クライアントから送信されたデータを受信するデータ イベント ハンドラーを登録します。接続が終了すると、別のログが出力されます。

3. HTTP ロング ポーリングを使用する

HTTP ロング ポーリングは、Web アプリケーションで長時間の接続を確立するテクノロジです。これは、HTTP プロトコルの長い接続メカニズムを通じて実装され、サーバーがクライアントにデータをプッシュできるようにします。

Node.js では、HTTP ロング ポーリング接続を自分で実装できます。以下は、単純な HTTP ロング ポーリングの例です。

const http = require('http');
const messages = [];

http.createServer(function(req, res) {
  console.log('client connected');

  if (req.method === 'POST') {
    let chunks = '';

    req.on('data', function(chunk) {
      chunks += chunk;
    });

    req.on('end', function() {
      messages.push(chunks);
      console.log('message received: ' + chunks);
    });
  } else if (req.method === 'GET') {
    res.writeHead(200, { 'Content-Type': 'text/plain', 'Connection': 'keep-alive', 'Cache-Control': 'no-cache' });

    let lastMessageIndex = 0;

    function checkForNewMessages() {
      if (lastMessageIndex < messages.length) {
        res.write(messages.slice(lastMessageIndex).join('\n') + '\n');
        lastMessageIndex = messages.length;
      }
    }

    setInterval(checkForNewMessages, 1000);
    checkForNewMessages();
  }
}).listen(8080);
ログイン後にコピー

この例では、ポート 8080 でリッスンする HTTP サーバーを作成します。リクエストのメソッド (GET または POST) を確認することで、リクエストをロング ポーリング メカニズムに変換できます。ロングポーリングリクエストでは、200 レスポンスコード、Connection ヘッダー、および Cache-Control ヘッダーをクライアントに送信して、接続を維持することを示します。次に、setInterval 関数と checkForNewMessages 関数を使用して最新のメッセージを継続的にチェックし、新しいメッセージがある場合はクライアントに送信します。

概要

Node.js では、WebSocket、TCP ソケット、HTTP ロング ポーリングなどのさまざまなテクノロジを使用して、長時間接続を実装できます。具体的な選択は、アプリケーションのニーズと設計によって異なります。もちろん、Socket.IO など、より多くの機能と柔軟性を提供できる他のより高度なテクノロジもあります。

以上がNodejsで長い接続を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート