サーバーセントイベントを使用してプッシュテクノロジーを実装します
コアポイント
- サーバーセントイベント(SSE)APIはプッシュテクノロジーを実装し、データは継続的なオープン接続を介してクライアントにストリーミングされ、新しい接続を繰り返し確立するオーバーヘッドを回避します。
- 双方向通信を許可するWebSocketsとは異なり、SSEはサーバーがクライアントにメッセージをプッシュすることのみを許可します。ただし、SSEには、カスタムメッセージタイプのサポートや自動再接続と切断など、特定の利点があります。
- クライアントは、名前のイベントを実装することにより、イベントストリームでさまざまなイベントタイプを処理できます。さらに、eventsourceの
onerror
イベントハンドラーを使用してエラーを処理することができ、クライアントはメソッドを呼び出すことでいつでもEventSource接続を終了できます。 close()
websocketsとの比較
多くの人々は、より強力なWebSockets APIによってしばしば不明瞭になっているため、SSEの存在を完全に認識していません。 WebSocketsを使用すると、クライアントとサーバー間の双方向のフルダップレックス通信が可能になりますが、SSEはサーバーがクライアントにメッセージをプッシュすることのみを許可します。ほぼリアルタイムのパフォーマンスまたは双方向通信を必要とするアプリケーションは、WebSocketに適している場合があります。ただし、SSEにはWebSocketよりもいくつかの利点があります。たとえば、SSEはカスタムメッセージタイプと自動再接続切断をサポートしています。これらの機能はWebSocketsで実装できますが、デフォルトではSSEで使用できます。 WebSocketsアプリケーションには、WebSocketsプロトコルをサポートするサーバーも必要です。対照的に、SSEはHTTP上に構築されており、標準のWebサーバーに実装できます。
検出サポート
SSEのサポートは比較的高く、Internet Explorerはまだサポートしていない唯一の主要なブラウザです。ただし、IEが遅れている限り、機能検出が必要です。クライアントでは、SSEはEventsourceオブジェクトを使用して実装します。これは、グローバルオブジェクトのプロパティです。次の関数は、EventSourceコンストラクターがブラウザで利用可能であるかどうかを検出します。関数がtrueを返す場合、SSEを使用できます。それ以外の場合は、ポーリングなどのバックアップメカニズムを使用する必要があります。
function supportsSSE() { return !!window.EventSource; }
接続
イベントストリームに接続するには、以下に示すようにEventSourceコンストラクターを呼び出します。サブスクライブするイベントストリームのURLを指定する必要があります。コンストラクターは自動的に接続を開く責任があります。
EventSource(url);
イベントハンドラーonopen
接続を確立した後、eventsourceのイベントハンドラーが呼び出されます。イベントハンドラーは、イベントを唯一のパラメーターとして開きます。次の例は、一般的なonopen
イベントハンドラーを示しています。 onopen
source.onopen = function(event) { // 处理打开事件 };
メソッドを使用して記述することもできます。この代替構文は、複数のハンドラーを同じイベントに添付できるため、addEventListener()
よりも優れています。以下はonopen
を使用して、以前のaddEventListener()
イベントハンドラーを書き直しました。 onopen
source.addEventListener("open", function(event) { // 处理打开事件 }, false);
メッセージを受け取ります
クライアントは、一連のDOMメッセージイベントとしてイベントストリームを解釈します。サーバーから受け取った各イベントは、eventsourceのonmessage
イベントハンドラーをトリガーします。 onmessage
ハンドラーは、メッセージイベントをそのみのパラメーターとして取得します。次の例では、onmessage
イベントハンドラーを作成します。
function supportsSSE() { return !!window.EventSource; }
メッセージイベントには、データ、Origin、およびlastEventidの3つの重要なプロパティが含まれています。名前が示すように、データには実際のメッセージデータ(文字列形式)が含まれています。データはJSON文字列であり、json.parse()メソッドに渡すことができます。 Originプロパティには、リダイレクト後のイベントストリームの最終URLが含まれています。原点を確認して、メッセージが予想されたソースからのみ受信されることを確認する必要があります。最後に、LastEventidプロパティには、イベントストリームで見られる最後のメッセージ識別子が含まれています。サーバーは、このプロパティを使用して、個々のメッセージに識別子を追加できます。識別子が見られない場合、LastEventidは空の文字列になります。 onmessage
イベントハンドラーは、addEventListener()
メソッドを使用して記述することもできます。次の例は、addEventListener()
を使用して書き直されたonmessage
イベントハンドラーを示しています。
EventSource(url);
イベントの命名
name eventを実装することにより、単一のイベントストリームでさまざまなタイプのイベントを指定できます。名前付きイベントは、メッセージイベントハンドラーによって処理されません。代わりに、各タイプのネーミングイベントは、独自のユニークなハンドラーによって処理されます。たとえば、イベントストリームにFooという名前のイベントが含まれている場合、次のイベントハンドラーが必要です。 Fooイベントハンドラーは、メッセージイベントハンドラーと同じであることに注意してください。ただし、イベントタイプが異なることを除きます。もちろん、他のタイプの名前付きメッセージには、個別のイベントハンドラーが必要です。
source.onopen = function(event) { // 处理打开事件 };
エラーの処理
イベントフローに問題がある場合、eventsourceのonerror
イベントハンドラーがトリガーされます。エラーの一般的な原因は、接続の中断です。 EventSourceオブジェクトは自動的にサーバーに再接続しようとしますが、接続が切断されるとエラーイベントもトリガーされます。次の例は、onerror
イベントハンドラーを示しています。
source.addEventListener("open", function(event) { // 处理打开事件 }, false);
イベントハンドラーをonerror
を使用して書き換えることもできます。 addEventListener()
source.onmessage = function(event) { var data = event.data; var origin = event.origin; var lastEventId = event.lastEventId; // 处理消息 };
切断
クライアントは、メソッドを呼び出すことにより、いつでもEventSource接続を終了できます。 close()
の構文を以下に示します。 close()
メソッドはパラメーターを受け入れず、値を返しません。 close()
source.addEventListener("message", function(event) { var data = event.data; var origin = event.origin; var lastEventId = event.lastEventId; // 处理消息 }, false);
接続ステータス
Eventsource接続のステータスは、ReadyStateプロパティに保存されます。ライフサイクルの任意の時点で、接続は、可能な3つの状態のいずれかに、オン、オン、およびオフになります。次のリストは、各状態について説明しています。- 接続 - Eventsourceオブジェクトが作成されると、最初に接続状態に入ります。この期間中、接続は確立されていません。確立された接続が失われた場合、EventSourceは接続状態にも移行します。接続内のeventSocketのReadyState値は0です。この値は、定数Eventsource.connectingとして定義されます。
- open - 確立された接続がOpenと呼ばれます。開いているEventSourceオブジェクトは、データを受信できます。 1のReadyState値は、オープン状態に対応します。この値は、定数Eventsource.openとして定義されます。
- close - 接続が確立されず、再接続が試みられない場合、eventsourceは閉じられています。この状態は、通常、
close()
メソッドを呼び出すことによって入力されます。閉じた状態でのEventSourceのReadyState値は2です。この値は、定数eventsource.closedとして定義されます。
次の例は、ReadyStateプロパティを使用してEventSource接続を確認する方法を示しています。ハードコード化されたReadyState値を回避するために、この例では状態定数を使用します。
function supportsSSE() { return !!window.EventSource; }
結論
この記事では、SSEのクライアントの側面を紹介します。 SSEについてもっと知りたい場合は、サーバーSSEを読むことをお勧めします。また、node.jsでSSEに関するより実用的な記事を書きました。楽しむ!
SSEはサーバー側の言語で使用できますか? SSEの接続エラーまたは割り込みを処理する方法は? SSEを使用してクライアントからサーバーにデータを送信できますか? ほとんどの最新のブラウザはSSEをサポートしています。ただし、Internet ExplorerはSSEをサポートしていません。 eventsource.jsなどのポリフィルを使用して、サポートされていないブラウザーでSSEのサポートを追加できます。 eventsourceオブジェクトの はい、マルチユーザーのリアルタイムアプリケーションにはSSEを使用できます。ただし、各ユーザーがサーバーへの別の接続を開くことを忘れないでください。多数のユーザーがいる場合、これによりサーバーの負荷が過剰になる可能性があります。 メソッドを使用して、これらの特定のイベントタイプを聞くことができます。 SSEとWebSocketsの両方がリアルタイムのデータアップデートを提供しますが、その機能とユースケースはさまざまです。 WebSocketsは、クライアントとサーバーの間に双方向通信チャネルを提供し、両当事者がいつでもデータを送信できるようにします。一方、SSEは、サーバーのみがクライアントに更新をプッシュできる一方向の通信チャネルです。これにより、SSEは、データの更新が主にサーバーによって開始されるアプリケーションにより適しています。
はい、SSEは任意のHTTP対応サーバー側の言語で使用できます。これには、Node.js、Python、PHP、Rubyなどの言語が含まれます。重要なのは、正しいHTTPヘッダーを設定し、SSE仕様に従ってデータをフォーマットすることです。
クライアントにSSEを実装するために使用されるEventSource APIは、接続が失われたときにサーバーに自動的に再接続しようとします。また、EventSourceオブジェクトの「エラー」イベントを聞いて、接続エラーまたは割り込みを手動で処理することもできます。
いいえ、SSEは、サーバーからクライアントへの一方向通信を目的としています。クライアントからサーバーにデータを送信する必要がある場合は、従来のAJAXリクエストを使用するか、WebSocketsなどの双方向通信テクノロジーに切り替えることができます。
SSEはすべてのブラウザをサポートしていますか?
SSE接続を閉じる方法は?
close()
メソッドを呼び出すことで、SSE接続を閉じることができます。これにより、サーバーがクライアントにより多くの更新を送信することができなくなります。 マルチユーザーのリアルタイムアプリケーションにSSEを使用できますか?
addEventListener()
はい、REST APIでSSEを使用できます。サーバーは、リソースが変更されたときにクライアントに更新を送信できます。これは、クライアントとサーバーの状態を投票せずに同期させるのに役立ちます。
以上がサーバーセントイベントを使用してプッシュテクノロジーを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。
