モバイル インターネットの急速な発展に伴い、特にリアルタイム通信、オンライン ゲーム、モノのインターネットなどの分野において、Web アプリケーションのリアルタイム性とユーザー エクスペリエンスがますます重要になってきています。これらの分野のニーズを満たすためには、いくつかのテクノロジーを使用してプッシュ サービスを実装する必要があります。 Node.js は、効率的なサーバーサイド JavaScript 実行環境として、リアルタイム プッシュのための比較的シンプルなソリューションを提供します。
Node.js でプッシュ サービスを実装するにはどうすればよいですか?一般的に使用されるメソッドの一部を次に示します。
ポーリングは、最も基本的な実装方法です。サーバーは継続的にクライアントにリクエストを送信し、クライアントは対応する間隔でサーバーをポーリングして、新しいデータがあるかどうかを判断します。この方法は実装が簡単ですが、効率が低く、接続数が増加するにつれて、サーバーへの負荷も増大し続けます。
Comet モデルは、サーバーがクライアントにデータをプッシュするモデルで、Web サーバーがクライアントを必要とせずにデータをクライアントにプッシュできるようにします。通常、ロングポーリングとストリーミングの 2 つの方法が使用されます。この方法では、長い接続が多数作成され、サーバーの負荷が増加します。
WebSocket プロトコルは双方向通信を備えた TCP プロトコルであり、リアルタイム通信の実現に役立ちます。 WebSocket プロトコルを通じて、クライアントとサーバーの間に永続的な接続を確立できるため、クライアントはサーバーからリアルタイムでプッシュ情報を受信できます。この方法でもサーバーにかかるリクエストの負荷を軽減できますが、クライアントとサーバーの両方が WebSocket プロトコルをサポートしている必要があります。
WebSocket と同様に、サーバー送信イベント プロトコルもサーバー側プッシュ サービスを実装できます。これは HTTP プロトコルに基づく一方向通信プロトコルであり、サーバーが一部のイベント情報をクライアントにプッシュできるようになり、クライアントはこれらのイベントをリッスンするだけで済みます。 WebSocket と比較すると、Server-Sent Events プロトコルは軽量であり、WebSocket の複雑なロジックの一部を保護することもできます。
上記 4 つの方式の中で、リアルタイム通信の実現やサービスの推進に最適な技術として広く考えられているのが、WebSocket と Server-Sent Events です。 Node.js では、いくつかのサードパーティ ライブラリを使用して、WebSocket および Server-Sent Events を実装できます。
Node.js には、WebSocket-Node、ws、SockJS などのサードパーティ WebSocket ライブラリがいくつかあります。これらのライブラリはすべて、互換性の高い WebSocket プロトコル実装を提供しており、サーバーとクライアント間の双方向通信接続を簡単に確立できるため、リアルタイム プッシュの効率が確保されます。以下は、ws ライブラリを使用して WebSocket を実装するサンプル コードです。
const WebSocket = require('ws'); const wss = new WebSocket.Server({ port: 8080 }); wss.on('connection', function connection(ws) { ws.on('message', function incoming(message) { console.log('received: %s', message); }); ws.send('Hello, you have connected to the server.'); });
Node.js には、いくつかのサードパーティのライブラリがあります。 Server-Sent Events ライブラリ (sse、Server-Sent-Events、eventsource など)これらのライブラリはすべて、サーバーからクライアントに情報をプッシュできる HTTP プロトコルに基づく一方向通信の実装を提供します。以下は、sse ライブラリを使用してサーバー送信イベントを実装するサンプル コードです:
const SSE = require('sse'); const http = require('http'); const server = http.createServer(function(req, res) { res.writeHead(200, { 'Content-Type': 'text/event-stream' }); sse.send({ message: 'Hello, you have connected to the server.', }); }); server.listen(8080); const sse = new SSE(server);
さらに、実際のアプリケーションでは、クライアントに定期的にニュースを送信するなど、情報を定期的にプッシュする必要があることがよくあります。一部のユーザーの行動を強制するなど。 Node.js はいくつかのタイマー モジュールを提供しますが、より一般的に使用されるのは setTimeout と setInterval です。
setTimeout は、指定された時間の後にいくつかの関数を実行するために使用されるグローバル関数です。以下はサンプル コードです。
setTimeout(function() { console.log('定时器已经执行完成'); }, 5000);
上記のコードは、5 秒後に「タイマーが実行されました」というコンソール メッセージを出力します。
setInterval もグローバル関数であり、ループ内でいくつかの関数を実行するために使用されます。以下はサンプル コードです。
setInterval(function() { console.log('定时器已经执行一次'); }, 5000);
上記のコードは、「タイマーは 1 回実行されました」というコンソール メッセージを 5 秒ごとに出力します。
上記のとおり、Node.js にはアプリケーション向けに便利で高速なプッシュ サービスとタイマー モジュールが用意されており、これらのモジュールを使用することで、リアルタイム プッシュ サービスやスケジュールされたプッシュ サービスを簡単に実装できます。
以上がNodejsで定期的にプッシュする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。