ホームページ  >  記事  >  ウェブフロントエンド  >  実際の長い接続をnodejsで実装する方法

実際の長い接続をnodejsで実装する方法

王林
王林オリジナル
2023-05-18 11:26:38861ブラウズ

インターネット技術の急速な発展に伴い、リアルタイム更新機能やデータ送信機能を実装する必要のあるアプリケーションがますます増えています。従来のHTTPプロトコルでは、クライアントがサーバーにデータを要求すると、サーバーは応答完了後に接続を切断するため、継続的なデータ送信ができず、リアルタイム性の要件を満たすことができませんでした。この問題を解決するために、WebSocket と長時間接続という 2 つのテクノロジーが登場しました。この記事では主に、Node.js を使用して実際の長時間接続技術を実装する方法を紹介します。

1. 長時間接続テクノロジとは

従来の HTTP プロトコルでは、クライアントはサーバーにデータを要求し、サーバーは応答が完了すると切断されます。この短期間の接続方法はサーバー リソースを節約しますが、いくつかの問題も引き起こします。たとえば、クライアントはサーバーに頻繁にデータを要求する必要があるため、ネットワーク帯域幅が無駄になります。同時に、リアルタイム要件が高いアプリケーションでは、クライアントは要求を送信し続ける必要がありますが、サーバーも要求を送信し続ける必要があります。リクエストを処理し続けると、サーバー リソースの浪費につながります。

ロングコネクション技術とは、クライアントとサーバー間の接続状態を維持し、クライアントとサーバー間のリアルタイム通信を実現する技術です。長時間接続テクノロジでは、クライアントがサーバーにデータを要求した後、サーバーはすぐにデータを返すのではなく、接続状態を維持し、サーバー上のデータ更新を待ってから返します。この方法により、頻繁なリクエストの数が減り、ネットワーク帯域幅の消費が減り、サーバーの負荷も軽減されます。

2. Node.js で長期接続を実装する方法

  1. socket.io を使用します

socket.io は最も人気のある長期接続です。 Node.js における接続という用語 接続性のソリューションの 1 つ。 Socket.io は、クライアントとサーバーの間に継続的な接続を確立して双方向通信を実現できるオープンソースのリアルタイム通信ライブラリです。 WebSocket、HTML5 Server-Sent Events (SSE)、Long Polling などの複数のプロトコルをサポートしているため、socket.io はさまざまなブラウザーや動作環境下で最適なリアルタイム通信方法を提供できます。

まず、Node.js 環境にソケット.io モジュールをインストールする必要があります:

npm install socket.io

サーバー コードに、socket.io モジュールを導入し、クライアント接続をリッスンします:

const app = require('http').createServer(handler)
const io = require('socket.io')(app)

app.listen(3000)

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

クライアント コードで、socket.io ライブラリを介して接続を確立します。

const socket = io.connect('http://localhost:3000')

この例では、クライアントが接続の確立に成功すると、コンソールに「ユーザーが接続されました」と出力されます。 。

接続が確立されると、双方向通信が可能になります。たとえば、サーバーはクライアントにメッセージ

io.emit('message', {
  content: 'Hello World!'
})

を送信し、クライアントはメッセージ

socket.on('message', (data) => {
  console.log(data.content)
})
  1. Use HTTP long connection
## を受信できます。 #HTTP の長い接続を使用することも、長い接続を実装する方法です。 HTTPプロトコルではクライアントとサーバー間を切断する必要がなく、継続的に接続を維持することができ、定期的にブランクリクエストを送信したり、セミクローズド技術を利用したりすることで長時間の接続が可能です。

Node.js では、HTTP モジュールのキープアライブ機能を使用して、HTTP の長い接続を実装できます。キープアライブは、TCP 接続の状態を維持するメカニズムです。 HTTP の長い接続では、サーバーは応答を返す前に HTTP ヘッダーに次のコードを追加します:

Connection: keep-alive
Keep-Alive: timeout=5, max=1000

これは、サーバーがクライアントに 5 秒間接続を維持することを要求し、最大 5 秒間接続を維持できることを意味します。 1,000 の接続。

クライアントは、

http.Agent クラスの keepAlive 属性を使用して、長い接続を開くことができます:

const http = require('http')
const agent = new http.Agent({
  keepAlive: true
})

http.get({
  hostname: 'localhost',
  port: 8080,
  path: '/',
  agent: agent
}, (res) => {
  res.setEncoding('utf8')
  res.on('data', (chunk) => {
    console.log(chunk)
  })
})

上記の例では、クライアントが長い接続を開き、HTTP GET リクエストを送信しました。サーバーにデータ更新があると、更新情報が自動的に送信されます。

3. 長時間接続の適用可能なシナリオ

長時間接続テクノロジは、オンライン ゲーム、ソーシャル チャット、リアルタイムのページ更新、リアルタイム性を必要とするその他のアプリケーションなど、多くのシナリオで使用できます。パフォーマンス。ただし、長い接続は万能ではなく、特定の欠陥や欠点があります。

まず、長時間接続すると接続を維持する必要があるためサーバーのリソースが占有され、サーバーの負荷が増加します。同時実行の量が大きすぎると、サーバーのパフォーマンスが低下します。

第 2 に、接続が長いとブロッキングが発生する可能性があります。サーバーの処理時間が長すぎる場合、またはクライアント ネットワークが不安定な場合、接続が長時間停止したり応答しなくなることがあります。

したがって、長時間接続テクノロジを使用する場合は、アプリケーションのシナリオを慎重に検討し、適切な技術ソリューションを選択し、アプリケーションの安定性とパフォーマンスを確保するために適切な最適化を実行する必要があります。

4. 概要

長時間接続テクノロジは、アプリケーションのリアルタイム性の向上に役立つ重要なリアルタイム通信テクノロジです。 Node.js は、長い接続を実装するためのさまざまな方法を提供します。その中で、socket.io と HTTP の長い接続は、一般的に使用される 2 つの技術ソリューションです。長時間接続テクノロジを使用する場合は、アプリケーションのシナリオを慎重に検討し、適切な最適化を実行して、アプリケーションの安定性とパフォーマンスを確保する必要があります。

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

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