幸いなことに、時代は変わります。 JavaScriptを使用して、Eventsourceライブラリを使用してSSE(サーバー送信イベント)接続を確立できます。この記事では、SSEの概念について説明し、簡単なチュートリアルを提供します。
ライブ接続
従来のHTTPリクエスト(クライアントはリクエストを発行し、サーバーが応答を返します)とは異なり、SSE接続は常に開かれており、サーバーからクライアントへの1つの通信を実現します。 2回の通信を許可するWebSocketとは異なり、SSEはクライアントのみにデータを送信し、クライアントは接続中にリアルタイムを受信します。接続が確立された後、データはイベントの形でJavaScriptクライアントに届きます。サーバーは、必要に応じて更新されたデータを含むイベントを送信する責任があります。
接続が閉じられない限り、クライアントはサーバーから送信された新しいデータイベントを待ち続けます。これにより、インストルメントパネルまたはチャットの継続的に更新する必要がある通知を構築する理想的なテクノロジーになります。
管理システムを接続します 上記の概念を練習するために、node.js(back -end)アプリケーションを作成して、JavaScriptクライアント(フロントエンド)にSSE接続エンドポイントを提供します。
アプリケーションは、userIDを入力してSSE接続を確立する必要があるシステムです。その後、サーバーは5秒ごとにイベントを送信し、ユーザーリストのリストを返します。ユーザーが接続をオフにすると、接続されたユーザーリストから自動的に削除されます。
始めましょう!
index.jsでは、エクスプレスライブラリをインポートします(HTTPエンドポイントの作成に使用):index.jsファイルを作成し、バックエンドロジックを集中します。さらに、index.htmlとscript.jsファイルを保存するA/publicフォルダーを作成して、ページを管理します。構造は次のとおりです。
/public/index.htmlの
<code class="language-bash">npm init -y npm i express</code>
npmを実行する端末で開始するには、ページをブラウザに表示する必要があります。
<code>/public index.html script.js index.js package.json</code>
バックエンドに戻り、connection.jsファイルを作成して、ユーザーとサーバー間の接続を管理します。
<code class="language-javascript">import express from "express" import fs from "fs" import path from "path" const app = express() app.use(express.json()) app.use(express.static(path.join(path.resolve(path.dirname("")), "public"))) app.get("/", (_, res) => { res.writeHead(200, { "content-language": "text/html" }) const streamIndexHtml = fs.createReadStream("index.html") streamIndexHtml.pipe(res) }) const PORT = 3000 app.listen(PORT, () => console.log(`Server is running on ${PORT} port`))</code>
その中で、接続クラスをエクスポートし、ユーザー(登録された新しいユーザー)とremoverUserメソッド(マッピングからユーザーを削除)に接続されたユーザーマッピングを保存します:
<code class="language-bash">npm init -y npm i express</code>
接続クラスは接続管理ロジックを分離したため、クライアントがSSE通信を開始できるように、サーバー(index.js)にエンドポイントを構成する必要があります。
<code>/public index.html script.js index.js package.json</code>
Content-Type: text/event-stream
req.on("close", () => {})
バックエンドが完了しました!これで、フロントエンドに注意を払うことができます。 index.htmlファイルでは、
を作成します
ユーザーがuseridを入力するテキストフィールド
2つのボタン:1つはSSE接続をオフにするために使用されます 接続されているユーザーリストを表示している<ul>aラベル、このリストは、サーバーから送信されたイベントを更新します。<ul>
<code class="language-javascript">import express from "express" import fs from "fs" import path from "path" const app = express() app.use(express.json()) app.use(express.static(path.join(path.resolve(path.dirname("")), "public"))) app.get("/", (_, res) => { res.writeHead(200, { "content-language": "text/html" }) const streamIndexHtml = fs.createReadStream("index.html") streamIndexHtml.pipe(res) }) const PORT = 3000 app.listen(PORT, () => console.log(`Server is running on ${PORT} port`))</code>
<code class="language-html"><!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Server Sent Events Demo</title> <h1>Server Sent Events Demo (SSE)</h1> </head> <body> </body> </html></code>
これにより、単純なSSEリアルタイム接続システムが完了します。このテクノロジーは、サーバーがフィード、チャット、インストルメントパネルなど、クライアントに1つのウェイデータを送信し続けるのに非常に適しています。
整合性のために、関数のチェックを追加したり、
イベント処理手順を関数に追加するなど、エラー処理とコードの詳細を追加したことに注意してください。 これらの改善により、コードの堅牢性と信頼性が向上します。
以上がSSE(サーバーセントイベント)でリアルタイムアプリケーションを作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。