コアポイント
- サーバーセントイベント(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) { // 处理打开事件 };eventSourceイベントハンドラーは、
メソッドを使用して記述することもできます。この代替構文は、複数のハンドラーを同じイベントに添付できるため、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 サイトの他の関連記事を参照してください。

JavaScript文字列置換法とFAQの詳細な説明 この記事では、javaScriptの文字列文字を置き換える2つの方法について説明します:内部JavaScriptコードとWebページの内部HTML。 JavaScriptコード内の文字列を交換します 最も直接的な方法は、置換()メソッドを使用することです。 str = str.replace( "find"、 "置換"); この方法は、最初の一致のみを置き換えます。すべての一致を置き換えるには、正規表現を使用して、グローバルフラグGを追加します。 str = str.replace(/fi

単純なJavaScript関数は、日付が有効かどうかを確認するために使用されます。 関数isvaliddate(s){ var bits = s.split( '/'); var d = new Date(bits [2] '/' bits [1] '/'ビット[0]); return !!(d &&(d.getmonth()1)== bits [1] && d.getdate()== number(bits [0])); } //テスト var

この記事では、jQueryを使用して、DOM要素の内側のマージン値とマージン値、特に外側の縁と要素の内側の縁の特定の位置を取得して設定する方法について説明します。 CSSを使用して要素の内側と外側の縁を設定することは可能ですが、正確な値を取得するのは難しい場合があります。 // 設定 $( "div.header")。css( "margin"、 "10px"); $( "div.header")。css( "padding"、 "10px"); このコードはそうだと思うかもしれません

この記事では、10個の例外的なjQueryタブとアコーディオンについて説明します。 タブとアコーディオンの重要な違いは、コンテンツパネルの表示方法と非表示にあります。これらの10の例を掘り下げましょう。 関連記事:10 jQueryタブプラグイン

ウェブサイトのダイナミズムと視覚的な魅力を高めるために、10の例外的なjQueryプラグインを発見してください!このキュレーションされたコレクションは、画像アニメーションからインタラクティブなギャラリーまで、多様な機能を提供します。これらの強力なツールを探りましょう。 関連投稿: 1

HTTP-Consoleは、HTTPコマンドを実行するためのコマンドラインインターフェイスを提供するノードモジュールです。 Webサーバー、Web Servに対して作成されているかどうかに関係なく、HTTPリクエストで何が起こっているかをデバッグして正確に確認するのに最適です

このチュートリアルでは、カスタムGoogle検索APIをブログまたはWebサイトに統合する方法を示し、標準のWordPressテーマ検索関数よりも洗練された検索エクスペリエンスを提供します。 驚くほど簡単です!検索をyに制限することができます

次のjQueryコードスニペットを使用して、Divコンテンツがコンテナ要素領域を超えたときにスクロールバーを追加できます。 (デモンストレーションはありません、それを直接firebugにコピーしてください) // d =ドキュメント // w =ウィンドウ // $ = jQuery var contentarea = $(this)、 wintop = contentarea.scrolltop()、 docheight = $(d).height()、 winheight = $(w).height()、 divheight = $( '#c


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

Dreamweaver Mac版
ビジュアル Web 開発ツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。
