問題タブ [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 - HTML5でサーバー送信イベントをトリガーする方法...または:別のスクリプトが呼び出された場合、PHPスクリプトは認識できますか?
私が気に入っているブラウザはすべて Server Sent Events をほぼ完全にサポートしているので、ポーリングが嫌いで先延ばしにしていたサイトに実装してみたいと思いました。しかし、最初はためらいがあり、何か助けが得られることを望んでいました。
これが私のユースケースです:
ユーザーは、時間ベースで競争力のあるフォーム (この場合はクラス登録) に移動します。すべてが等しい場合、資格のある約30〜40のクラスのリストがあり、「彼女は最初にログインしましたが、最初に保存を押しましたが、保存を押すつもりはありませんでしたが、彼女はすでに選択しました」のインスタンスを最小限に抑えるために別のクラス」など、フォームをリアルタイムで作成したいので、誰かがオプションを選択すると、それがデータベースに直接送られ、フォームを表示している他の人はフォームがいっぱいになっていることがわかります。(気が変わった人のストレスについては後で対処します)。
そのため、ポーリングのシナリオでは、40 個のスポットのステータスを確認して更新し、衝突が発生する可能性がある間隔を設定する必要がある AJAX 呼び出しに対処する必要がありました。
しかし、Server Sent Events を使用すると、更新が必要なスポットだけをリスナーに取得させることができます。
リスナーが過負荷になるリスクはありますか? スクリプトがステータスの変更について連続して 15 個のメッセージを送信するとします。ユーザー エージェントがキューに入れられたタスクを処理する方法について漠然とした言及を目にしますが、それが接続を確立するためなのか、サーバーから送信されたメッセージを処理するためなのかは明確ではありません
これは基本的に、ブラウザからサーバーにポーリングの負担を渡すだけですか? スクリプトは毎秒 DB の変更をチェックする必要がありますか? 変更が発生したときにスクリプトが認識または通知される方法はありますか?
requests.php
シート リクエストがajax 経由で送信されupdates.php
、イベントがブラウザにプッシュされると仮定しましょう。コミットするupdates
までアイドル状態にするための標準的および/または巧妙な方法はありますか?requests
私が考えることができる唯一の解決策はrequests.php
、コミットされた変更をフラット ファイルに書き込み (commits.xml
おそらく)、updates.php
0.5 秒ごとにファイル サイズをポーリングすることで、ワークロードを最小限に抑えることです。
より優れた/よりスマートな/より明白なソリューションはありますか?
php - グローバル スコープと永続性を備えた PHP で Observer パターンを実装する方法
私の目標の非常に基本的な考え方は次のとおりです。
- ユーザー A がフォームを介して値を
submit.php
- ユーザー B は、送信された値を監視します。この値は、サーバー送信イベントを介して更新され、からプッシュされ
updates.php
ます。
submit.php
は、データベースへの新しい値の書き込みと、 のオブザーバー オブジェクトへの通知を処理しますupdates.php
。
混乱のポイント:
の各インスタンス (セッション) に
updates.php
は独自のオブザーバーが必要ですか? 更新を表示する各ユーザーはスクリプトの独自のインスタンスを実行しますか? それとも、すべて同じグローバル オブザーバー オブジェクトを共有できますか?サブジェクト オブジェクトが読み込まれると、オブザーバー オブジェクトはどこから取得されるのでしょうか? オブザーバーがアクティブであるため、オブザーバーを保存/スリープ状態にすることはできませんよね?
ObjectStorage オブジェクトを使用する場合、
submit.php
が呼び出されてフェッチされると、オブザーバー オブジェクトは実際にはオブザーバー オブジェクトになりますか? つまり、更新メソッドを呼び出すと、実際にユーザーのリストが更新されますか?submit.php
フォームが送信されるたびに ObjectStorage オブジェクトを保存/取得するにはどうすればよいですか? 明らかに、私はセッションを使用できませんよね?それらはユーザーごとですか?
短いバージョン:オブザーバーがライブオブジェクトであるサブジェクト側のオブザーバーを含むグローバルで永続的なオブジェクトを取得する方法はありますか?
このアイデアに対するより良い、またはより簡単なアプローチがある場合 (または、私が完全に混乱していて教育が必要な場合) は、お知らせください。しかし、私はこのプロジェクトを使用して Observer パターンをアイデアとしてよりよく理解しようとしているため、既にすべてを実行できるフレームワークを探しているわけではありません。
javascript - すべてのイベントの HTML5 EventSource リスナー?
EventSource を使用して JavaScript クライアント アプリにプッシュ通知があります。次のようにイベント リスナーをアタッチできます。
しかし、サーバーからプッシュされているすべてのイベントを監視したい (基本的にはデバッグ用) ため、イベントが送信されてもイベント リスナーがない場合は、簡単に見つけることができます。つまり、eventListeners がバインドされていないすべてのイベントを「無視」したくありません。
私はこのようなことを期待しています:
しかし、html5rocksにあるような仕様とチュートリアルでは、これが可能かどうかは指定されていません。
一方、すべてのサーバーイベントなどを監視できるのは、firefox/chrome 拡張機能である可能性があります。これらのことは、プッシュ通知の開発に本当に役立ちます。
ありがとう!
node.js - iisnode を使用して node Express サーバーを実行中 - EventSource ハンドラーが起動しない
iisnode を使用して node-express アプリケーションを機能させるのに問題があります。私はiisで簡単なhttp pub/subサーバーをセットアップしています。これは POST 経由でメッセージを受信し、データを関連するリスニング クライアントにプッシュします。コード...
サーバ
クライアント
...ここで、EventSource url に渡されるパラメーターは、このクライアントを一意に識別するものです。
サーバーとクライアントは、同じルート ドメインの下の別のサブドメインでホストされます。サーバーがメッセージを正しく受信していることを確認しました。私が抱えている問題は、クライアント イベント ハンドラーがヒットしないことです。クライアント コードを でラップしようとしました$(document).ready()
が、影響はありませんでした。スタンドアロン ノード プロセスを使用して、IIS の外部でセットアップをレプリケートしましたが、正しく動作します。
Windows 7 64ビットでChrome 18、nodejs 0.6.18、iisnode、IIS 7.5を使用しています。
私はアイデアを失ったばかりで、オンラインで議論されている同様の問題を見つけることができませんでした. どんな助けでも大歓迎です。
api - Digg のストリーミング API はどのように機能しますか?
私はこれが本当に好きです: http://services.digg.com/2.0/stream
データは単一の接続を使用して継続的に受信され、コンテンツ タイプは application/json です。また、ブラウザで消費可能です。これはどのように実装されていますか?少し調べてみると、ロング ポーリング、HTML5 サーバー送信イベント、または WebSocket でさえないようです。
そのようなものを構築するにはどうすればよいですか?出発点として使用できるオープンソース ソリューションはありますか?
ありがとう、
/デビッド
html - SSEとサーブレット3.0
ページが読み込まれるときに、一般的なSSEを登録しました。
クライアント:
私のJavascript-Debuggerは、「eventsourceがオープンしました!」と言っています。成功しました。
私のサーバーコードはサーブレット3.0です。
コードは機能します!Client-Codeは、3秒ごとにdoGet()-メソッドをトリガーし、新しいデータを取得します。
質問: しかし、Async-SupportやasyncContext.addListener(asyncListener)などの新しいサーブレット3.0 Futuresや、私が知らない何かを使用して、このコードを改善するにはどうすればよいのでしょうか。ストリームを閉じることはないので、サーバーはどのように拡張されるのでしょうか。
理論的には、最良のアプローチは、新しいデータが存在するときにサーバー側のコードを介してdoGet()-メソッドを明示的にトリガーすることです。したがって、クライアントはクライアント側の「onmessage()」-メソッドをトリガーする必要はありません。サーバー側"doGet()"-新しいデータを3秒ごとにメソッドします。
asp.net - サーバー送信イベントによるアラート セッションの終了
ASP.NET セッションが終了したときに、クライアントにメッセージを送信したいと考えています。タイマーを使いたくなかったので、「サーバー送信イベント」を使用して、global.asax の session_end イベントからクライアントを呼び出してみました。global.asax から特定のクライアントを呼び出す方法はありますか? この提案に 'SignalR' ライブラリを使用してみましたが、Global.asax から特定のクライアントを呼び出す際に問題がありました (クライアントのグループを呼び出すことはできましたが、特定のクライアントを呼び出すことはできませんでした)。この提案のベスト プラクティスは何ですか?
python - Internet Explorer を使用してアクセスする Twisted Server Sent Events
リアルタイムの更新が必要なプロジェクトに取り組んでいます。そこで、ずっと前に Twisted SSE Handler (cyclone.sse) を使用することにしました。プロジェクトは終了しました。また、すべての pub/sub 機能は、Internet Explorer を除くすべてのブラウザーで有効です。IE は SSE をサポートしていません。サーバー側のコードを変更せずに IE で pub-sub を動作させるにはどうすればよいですか? また、私はcyclone.sseを使用しているため、長いポーリングは役に立ちません。
javascript - HTML5→動的に関連付けられたサーバー送信イベント
SSEを使い始めたばかりですが、どうすればSSEをより動的にすることができるのでしょうか。
ボックスを使用してユーザーを選択し、ユーザー名に対応する画像とテキストの変更を行っています。ここで、SSEを介してユーザーの更新を確認し、ユーザーを引き続き選択できるようにします。
ボックスを変更するときに、 eventSourceを追加しようとしました。<select>
どうすれば目標を達成できますか?
編集 これで、eventSourceが正常に追加されました(ソース自体に問題がありました)。
しかし、別のソースを追加すると、実際には2つのソースが実行されています。古いものを削除するにはどうすればよいですか?
php - PHPサーバー送信イベントはトラフィックを削減します
PHPページでSSEを使い始めたところです。このコードを使用すると、新しいデータを非常に簡単に送信できます。
ただし、これは、クライアントに毎秒データを送信しているため、ループを実行する必要があることを意味します。例の文字列はあまりデータではありません。しかし、後でデータベースに接続して、そこからデータを取得したいと思います。
記事全体(またはメッセージなど)のようなものをプルすると、非常に大量のデータが生成されます。
今私の質問:新しいデータを提供し、別のPHPスクリプトからクライアントに送信するようにスクリプトに指示するにはどうすればよいですか?
小さなAPIを使用してステータスの更新をサーバーに送信する小さなiOSアプリを作成しました。APIスクリプトの1つで、新しいデータを送信するようにWebインターフェイスのイベントソーススクリプトに指示したいと思います。
そして、私がそうするように言うときだけ。どうすればこれを達成できますか?
助けてくれてありがとう、ジュリアン