問題タブ [server-sent-events]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - cURL を介した HTML5 サーバー送信イベント
データベース内のテーブルで何かが発生したときに、HTML5 ベースの通知システムを作成しようとしています。この通知機能の表を特別に作成しました。これがどのように機能するかです:
- Server-Sent Events ページ (
sse.html
) はsource.php
、その通知内容について参照します。 action.php
テーブルにデータを挿入することによってコンテンツ変更通知をトリガーするアクションが含まれています。source.php
テーブル内の新しいデータを定期的にチェックします。通知がある場合は、通知を渡す必要があります。
私の質問は、テーブルをチェックせずにこれを行うことは可能ですか?
source.php
アクションが実行されたときにcURLを使用してコンテンツを直接送信することを考えていaction.php
ます。これはできますか?
Content-Type
HTTP ヘッダーを に設定して cURL が使用されているのを見たことがありますtext/event-stream
が、その使用方法がわかりません。
sse.html
source.php
server-sent-events - サーバー送信イベントは実際にどのように機能しますか?
だから私はサーバー送信イベントの概念を理解しています(EventSource
):
- クライアントはを介してエンドポイントに接続します
EventSource
- クライアントはエンドポイントから送信されたメッセージを聞くだけです
私が混乱しているのは、サーバー上でどのように機能するかです。私はさまざまな例を見てきましたが、頭に浮かぶのはMozillaの例です:http://hacks.mozilla.org/2011/06/a-wall-powered-by-eventsource-and-server-sent-イベント/
これは悪い例かもしれませんが、私が理解しているように、サーバー側がどのように機能するかは理にかなっています。
- データベースなどのデータストアで何かが変更された
- サーバーサイドスクリプトは、N秒ごとにデータストアをポーリングします
- ポーリングスクリプトが変更に気付いた場合、サーバー送信イベントがクライアントに発生します
それは理にかなっていますか?それは本当にそれが最低限の観点からどのように機能するのですか?
ajax - ファイルアップロードの進行状況を取得するための最良の SSE メソッドは?
AJAX の後方互換性のあるファイル アップロードの進行状況をコーディングしています。HTML5 には xhr.upload.progress イベントがあります。これは、XHR2 以外のブラウザーの代替手段になります。進行状況を監視するために APC 拡張機能を使用しています。
さて、私の質問は次のとおりです。カスタムビルドの xhr.upload.progress イベントを発生させるための最良の方法はどれですか? HTML5 SSE を使用する予定ですが、サポートされていない場合は、何にフォールバックすればよいかわかりません。
- ポーリング: 数秒ごとの継続的な進行状況に対する AJAX リクエスト
- ロングポーリング: 明らかにポーリングよりも優れている? ただし、リクエストは実際にはサーバー上で非同期に処理されないため、サーバーがフリーズする原因になると聞いています。したがって、それを回避するには NodeJS のようなものを実装する必要があると思います。凍結の問題が誇張されている/誇張されている場合は、おそらくロングポーリングを使用します。
- 終わりのない iframe: iframe は良いアイデアのように思えますが、問題があると確信しています。ロングポーリングのようにサーバーもフリーズしますか?
編集:ここに私の主な関心事があると思います。これらの AJAX メソッドのスケーラビリティはどの程度ですか? EventSource SSE はサーバーのメモリもフリーズしますか? その場合、NodeJS や ScaleStack などの使用を検討する必要がありますか? また、サーバーのオーバーヘッドはアップロード バーで本当に問題になるのでしょうか?
jquery - jQuery および AJAX またはサーバー送信イベント
サーバー送信イベントでサーバー側のコードで再試行時間を設定できない限り、どちらの場合もクライアントがサーバーにリクエストを送信し、サーバーが応答するようです。では、jQuery の post または get メソッドではなく SSE を使用する利点はありますか?
websocket - サーバー送信イベント - まだ確認する価値がありますか?
WebSockets はより多くの注目を集めているようで、Server-sent Events ができることすべて (およびそれ以上) を行うことができるため、SSE はまだチェックアウトする価値がありますか?
SSE の方が使いやすいように見えますが、記事とライブラリの量を考えると、ここでは WebSocket が明らかに勝者のようです。
php - サーバー送信イベントによるブラウザのクラッシュ
SSE を使用して使用可能なテーブルを更新する Web アプリケーションがあります。DB のステータスが 1 か 2 かを読み取り、それに応じて座席配置を更新します。
ただし、(アプリの実行中に) ブラウザーがクラッシュすることがあり、そのエラーを再現するのは困難です。エラーの原因は SSE にあると強く疑われます。
以下は、私が使用している SSE コードのサンプルです。間違って使用しているか、SSE が現在不安定です。私はこれについて多くのグーグルを行いましたが、解決策はまだ見つかりません。
貢献されたアドバイスやヘルプに本当に感謝しています。
javascript - HTML5 サーバー側イベント: EventSource とラップされた WebSocket
HTML5 Server-Sent Events (SSE) API は、HTML5 WebSocket の上にある限定されたイベントベースの API にすぎませんか?
EventSource
anはただの aのように私には思えますWebSocket
:
.send()
データできませんtext/event-stream
フォーマットを使用- 代わりに、動的に名前が付けられた (サーバー定義の) イベントを発生させます。
onmessage
Web サーバーがイベントをクライアント デバイスにプッシュするというアイデアは、非常に興味深いものです。この API には牽引力がありますか?
非同期イベント モデルは、Node と組み合わせるとうまく機能すると思いますが、私の ASP.NET の世界では、これのユース ケースはあまり見られません。
ruby - Sinatraアプリでのイベントストリーム接続の処理
KonstantinHaaseによるサーバー送信イベントを使用したチャットアプリの優れた例があります。実行しようとしていますが、コールバックに問題があります(Sinatra 1.3.2を使用し、Chrome 16で参照しています)。それらは単に実行されないため(たとえば、ページのリロード後)、接続の数が増えています。
また、他の場所でKonstantinが提案しているように、空のデータを送信するように定期的なタイマーを設定しない限り、接続は30〜60秒で閉じられます。
複製できますか?はいの場合、これらの問題を何らかの方法で修正することは可能ですか?WebSocketはこの点でシームレスに機能します...
tcp - TCP ハンドシェイク: サーバー送信イベントと WebSocket?
私はネットワーク技術にあまり詳しくありません。
SSE と WebSocket の両方が HTTP 経由で通信するのはいつかと思っていましたが、HTTP 接続の前に有名な TCP 3 ウェイ ハンドシェイクもありますか?
はいの場合、WebSocket には 2 つの 3 ウェイ ハンドシェイクがありますか? 1 つは TCP 経由で、もう 1 つは HTTP 経由のアップグレード方法ですか?
前もって感謝します!
apache - HTML5 サーバー送信イベントのプロトタイピング - あいまいなエラーと繰り返しのポーリング?
サーバーサイドイベントは私の要件に完全に適合し、実装が簡単であるように思われるため、理解しようとしていますが、あいまいなエラーを乗り越えることができず、接続が繰り返し閉じられて再接続されているように見えます-開いた。私が試したことはすべて、このチュートリアルと他のチュートリアルに基づいています。
PHP は単一のスクリプトです。
JavaScript は次のようになります (ボディ ロードで実行)。
ちょっと調べたけど情報出てこない
- サーバー送信イベントをサポートするために Apache に特別な設定が必要な場合、および
- この種のセットアップでサーバーからプッシュを開始するにはどうすればよいですか (たとえば、CLI から PHP スクリプトを実行して、既に接続されているブラウザーにプッシュすることはできますか?)
この JS を Chrome (16.0.912.77) で実行すると、接続が開かれ、時間が受信され、エラーが発生し (エラー オブジェクトに有用な情報はありません)、3 秒で再接続され、同じプロセスが実行されます。Firefox (10.0) でも同じ動作をします。
EDIT 1:問題は使用しているサーバーに関連している可能性があると考えたので、バニラのXAMPPインストールでテストしたところ、同じエラーが発生しました。基本的なサーバー構成は、変更/追加構成なしでこれを処理できる必要がありますか?
編集 2 : 以下は、ブラウザーからの出力の例です。
これがどこで間違っているのか誰にも教えてもらえますか? 私が見たチュートリアルでは、SSE が非常に単純であるように見えます。また、上記の 2 つの番号付きの質問に対する回答は、非常に役立ちます。
ありがとう。