インターネット技術の急速な発展に伴い、リアルタイム更新機能やデータ送信機能を実装する必要のあるアプリケーションがますます増えています。従来のHTTPプロトコルでは、クライアントがサーバーにデータを要求すると、サーバーは応答完了後に接続を切断するため、継続的なデータ送信ができず、リアルタイム性の要件を満たすことができませんでした。この問題を解決するために、WebSocket と長時間接続という 2 つのテクノロジーが登場しました。この記事では主に、Node.js を使用して実際の長時間接続技術を実装する方法を紹介します。
1. 長時間接続テクノロジとは
従来の HTTP プロトコルでは、クライアントはサーバーにデータを要求し、サーバーは応答が完了すると切断されます。この短期間の接続方法はサーバー リソースを節約しますが、いくつかの問題も引き起こします。たとえば、クライアントはサーバーに頻繁にデータを要求する必要があるため、ネットワーク帯域幅が無駄になります。同時に、リアルタイム要件が高いアプリケーションでは、クライアントは要求を送信し続ける必要がありますが、サーバーも要求を送信し続ける必要があります。リクエストを処理し続けると、サーバー リソースの浪費につながります。
ロングコネクション技術とは、クライアントとサーバー間の接続状態を維持し、クライアントとサーバー間のリアルタイム通信を実現する技術です。長時間接続テクノロジでは、クライアントがサーバーにデータを要求した後、サーバーはすぐにデータを返すのではなく、接続状態を維持し、サーバー上のデータ更新を待ってから返します。この方法により、頻繁なリクエストの数が減り、ネットワーク帯域幅の消費が減り、サーバーの負荷も軽減されます。
2. Node.js で長期接続を実装する方法
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) })
Connection: keep-alive Keep-Alive: timeout=5, max=1000
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) }) })
以上が実際の長い接続をnodejsで実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。