ここではいくつかのクライアント側のコードの非常に単純な例です:サーバー側で
var source = new EventSource("/server-side-app-that-gives-progress-updates")
source.onmessage = function(e) {
console.log(e.data);
}
、あなたの/server-side-app-that-gives-progress-updates
アプリはちょうどこのようにフォーマットテキスト形式のデータを送り返す:
data: some data\n
data: more data\n\n
それContent-Type: text/event-stream
ヘッダーで応答を送信することでストリーミングを開始します。上記のクライアントコードは、それを単一のe.data
メッセージとして "some data\more data
"と表示します。
サーバーアプリケーションにアップデートがある場合、そのフォームの別のメッセージをレスポンスに書き込みます。
あなたの代わりにJSONの一連のメッセージとして更新を送信したい場合は、サーバーアプリは書き込み:
data: {"foo": "bar", "hoge": "moge"}\n\n
をそしてあなたのクライアントコードは、これを行うことができます:
source.onmessage = function(e) {
var jsonObject = JSON.parse(e.data);
console.log(jsonObject.foo);
}
もちろんあります上記の場所で学ぶことができます。しかし、それは一言で言えば。
私は、クライアントの要求に応じて、 それがクライアントに 結果を返す前に、少し時間がかかる場合があり、バックグラウンドで特定のタスクを実行し、。httpサーバを持っています
これは、サーバー送信イベントが設計された主な使用例の1つです。
特定のバックグラウンドタスクに関する進行状況情報をクライアントに更新する方法はありますか?
はい、サーバー送信イベントで行うことができます。
ありXMLHttpRequest
の進捗ハンドラですが、私が正しく を理解している場合にのみ、データ転送の進行状況のために使われています。
右。 XHRは、応答する前にサーバー上で起こっていることすべてに関する進捗情報を取得することはできません。私のアプリケーションで
、流れの例がこれです:
は、HTTPの仕様のこの部分ですか?
HTTP仕様の一部ではありません(HTTP/2には多少の関連機能があります)。
または私はあなたがこのためにWebSocketをする必要はありません何か他(のWebSocket ..?)
が必要です。 WebSocketは、リアルタイムのチャットアプリケーションなど、クライアントとサーバー間で実際の双方向の全二重通信が必要な場合に最適です。