17

私は Web プッシュ技術に取り込もうとしているので、調べ始めました。基本的に、Websockets と SSE という 2 つのテクノロジを見つけました。Perl がサポートされていないという理由で Websocket を除外した後、よりネイティブな SSE アプローチを試してみたいと思いました。

さて、SSE を機能させようとするのは本当に骨の折れる作業です。すべてのドキュメントには相反する情報が含まれており、SSE がどのように機能するかについての一般的なコンセンサスはないようです。<event-listen src="events.pm">タグが必要だと言う人もいれば、 EventSourceJSオブジェクトだけが必要だと言う人もいます。EventSource オブジェクトを使用しても、約 4 つの可能な実装が見つかりましたが、どれも機能していないようです。

これが私が持っているものです。events.pmmod-perl を使用するがあります。そのファイルを呼び出すと、 が返されますdata: I haz a websocket。content-type で送信されapplication/x-dom-event-streamます。

HTML および JS ファイルは、さまざまな実装で頻繁に書き直されたため、私はそれらを断念しました。皆さん、私に実用的な例を教えてください。

また、特定のメッセージをクライアントに送信する方法がわかりません。定義済みのメッセージを送信することは問題ないようです。しかし、誰かが私にメッセージを送信する状況を想像すると、その情報 (「あなたへの新しいメッセージがあります」) が、その情報を必要とする正確なブラウザーにどのように送信されるのか正確にはわかりません。これで見つけたすべての投稿は、せいぜいあいまいです。

編集

基本的に、私が必要としているのは、「ねえ、この通知を受け取ってもよろしいですか?」と言う方法です。最初にあなたのID/セッション/トークンを見せてください!接続されたクライアントごとに。SSEでそれが可能なのだろうか。

4

3 に答える 3

8

サーバー送信イベントは、サーバー送信イベントを使用したスト​​リーム更新の記事、つまりイベントストリーム形式で非常によく説明されていると思います。Firefox 6では、SSEが最新のブラウザの大部分でサポートされるようになりました(残念ながらIEを除く)。

クライアントに特定のメッセージを送信する方法がわかりません。事前定義されたメッセージの送信は問題ないようです。しかし、誰かが私にメッセージを送信する状況を想像すると、その情報(「あなたに新しいメッセージがあります」)がその情報を必要とする正確なブラウザにどのように正確に送信されるかわかりません。

クライアントは、キープアライブイベントストリーム、ブラウザ/タブが閉じられるか、ユーザーがcloseメソッドを呼び出すか、ネットワーク接続が失われるまで閉じられない単方向接続によってSSEサーバーに接続されます。

基本的に、私が必要としているのは、「ねえ、あなたはこの通知を受け取ることを許可されていますか?」と言う方法です。最初にID/セッション/トークンを見せてください!」接続されたクライアントごとに。SSEで可能かしら。

この種の認証ロジックはサーバー側で実行する必要があるため、使用している言語またはプラットフォームによって異なります。ご使用の環境にそのためのライブラリがない限り、おそらくそれを作成する必要があります。

于 2011-09-02T18:55:32.237 に答える
7

仕様が変更/進化しました。現在のバージョンはEventSourceオブジェクトを使用しています。HTML 要素がなくなりました。

現在の MIME タイプはtext/event-streamです。はx-dom-event-stream初期の実装 (2006 年の Opera) でのみ使用されました。

クライアントを識別/認証するには、Cookie を使用するか、ある種の認証トークン (セッション ID) を含むイベント ストリーム URL に接続します。これにより、特定の TCP/IP 接続がそのユーザーに関連付けられていることがわかります。

http://html5doctor.com/server-sent-events/

于 2013-01-09T00:57:50.657 に答える
1

@porneLの回答に追加。EventSource送信するリクエストに Cookie を含めるように指示できます。EventSource次のようにオブジェクトを作成するだけです。

var evtsrc = new EventSource('./url_of/event_stream/',{withCredentials:true});

これを最新バージョンの chrome と firefox でテストしました。

ソース: http://www.sitepoint.com/server-sent-events/

編集:どうやらこれは不要/役に立たない。@Tamlyn のコメントを参照してください。

于 2014-04-15T12:37:52.373 に答える