問題タブ [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 - EventSourceは最初のメッセージの後で切断します
EventSource
振る舞いについて少し混乱しています。
それはうまく接続し、最初のメッセージを受信するまで接続されたままになります。
data: something\n\n
メッセージを送信すると、接続が切断され、新しい接続が作成されます。
ヘッダーと接続の使用Content-Type: text/event-stream
はイベントストリームとして認識され、インスペクターはpending
ステータスを表示します。
私が言ったように、私が最初のメッセージを送るまで、すべてがうまくいきます。
この後、接続が中断され、新しい接続が作成され、メッセージがブラウザに送信されません(少なくともページが更新されないはずです)。
私のサーバーとクライアントのコードは次のとおりです:http ://www.html5rocks.com/en/tutorials/eventsource/basics/
これはどのブラウザでも発生します。
php - サーバー送信イベント 停止 新しいパラメータで開始
助けてください。
サーバー送信イベントを使用して、データベースに保存されているデータに基づいて Web サイトを動的に更新しています。
ここで、前のメッセージで受信したデータに基づいて、新しいパラメーター ('abc.php/?lastID=xxx') を PHP スクリプトに戻したいと考えています。
現在の「ストリーム」を停止するために使用できることは理解していますが、URL が動的に作成される新しい EventSource ごとevent.close
に同じものを使用する方法を見つけるのに苦労しています'EventListener'
誰かが私を正しい方向に向けることができますか?
ありがとう、
ruby - CORS SSE - キャッチされないエラー: SECURITY_ERR: DOM 例外 18
Goliathと SSEを使用して、最新のツイート、ニュースなどの更新をリアルタイムで送信するストリーミング サーバーを開発しています。このサーバーは別のドメインにマップされます。
index.html
ゴリアテ コンポーネント
Goliath ストリーミング サーバーは、ローカル マシンの 9000 ポートで実行されています。それを介してページにアクセスしようとすると、http://localhost/index.html
応答で CORS 'Access-Control-Allow-Origin' ヘッダーを送信しても、Chrome で言及されているエラーが表示されます。ここでは、FF で正常に動作しないようにしてください。
これを修正する方法はありますか?
javascript - javascript-毎回変数のDOMを参照
毎回DOMを参照する場合は、変数を使用しないでください。質問のタイトルは誤解を招くように思われるかもしれません。ただし、シナリオは少し異なります。ページが最初に読み込まれたときに完全に機能するSSEスクリプトを作成しましたが、ページのコンテンツは絶えず変更されているため、常に機能するとは限りません。
ご覧のとおり、最初の変数はデータを配列に入れてEventSource
URLに入れます。明らかに、これはページのように更新を継続せず、どちらも更新しませんsource
。私はすべてをつなぎ合わせてみたので、代わりにsource.onmessage...
なりました。
しかし、イベントソースは変更されないため、これは機能しませんでした。SSEソースが要求されるたびにDOMが参照されるようにしたい。私はこれがこれらのことをする良い方法ではないことを知っていますが、この場合それを回避する方法を見ることができません。
python - フラスコ内のpyserial読み取りシリアルポート(おそらくgeventを使用)
実行中のマシンのシリアルポートを読み取る(そして読み取り続ける)必要があるWebサーバーを構築しています。
目的は、バーコード スキャナーを読み取れるようにすることと、Server-Sent Events を使用して、読み取ったバーコードでブラウザーを更新することです。
これを行うためにフラスコを使用しています。私はブラウジングしましたが、一部の実装ではフラスコのみが必要であり、Gevent のような非同期ライブラリが必要であると言う人もいれば、Gevent と Redis や RabbitMQ のようなある種のキューが必要であると言う人もいます。
ここで、stackoverflow で見つけた非常に単純な例に基づいてコードを作成しようとしました。ほとんど機能していますが、いくつか質問があります。
- Chrome ではクロスオリジン エラーが発生します。Access-Control-Allow-Origin ヘッダーを追加することで、FireFox で動作させることができますが、Chrome はまだ動作しません。FF だけが SSE クロスオリジンをサポートするというのは正しいですか? ブラウザーは別のマシンからバーコード データを読み込む必要があるため、CORS をサポートする必要があります。
- 各メッセージの後、ブラウザーはコンソールにバーコードを表示しますが、その後接続を閉じ、約 3 秒後に再度開きます。これはFlaskに由来するようで、データを提供してから停止します。
- また、これが負荷の下でどのように機能するのか疑問に思っています。つまり、フラスコは text/event-stream mimetype に対して接続を開いたままにします。複数のクライアントが接続すると、すべての接続が飽和状態になるため、しばらくするとフラスコがブロックされませんか?
私のコードは次のとおりです(わかりやすくするために短縮されています)
サーバ側:
クライアント側:
私がここで見ていた情報がいくつかあります: http://www.socketubs.net/2012/10/28/Websocket_with_flask_and_gevent/ http://sdiehl.github.com/gevent-tutorial/#chat-server
クロスオリジンと 3 秒の遅延の問題について、誰かが私の質問を解決し、いくつかの解決策を教えてくれることを願っています。
ありがとう。
javascript - SSE Uncaught エラー: SECURITY_ERR: Server Sent Events (SSE) を提供するサーバーでの DOM Exception 18
Server Sent Events (SSE) を提供するサーバーにブラウザーを接続しようとしています。このサーバーには、元のサーバーとは異なるドメインがあります。たとえば、http://d1.example.com/page
このページを呼び出すと、 の SSE チャネルに接続しようとしhttp://d2.example.com/subscribe
ます。これを実行しようとすると、次のエラーが表示されます。
Uncaught Error: SECURITY_ERR: DOM Exception 18
行で:
var source = new EventSource("http://d2.example.com/subscribe")
どうすれば修正できますか?
更新(私が試した解決策):
1-CORS
Web サービスのヘッダーに追加して、 CORSを試しました。ページからの呼び出しは現在正常に機能していますが、問題は解決しませんでした! SSE は通常の HTTP リクエストで動作すると思っていたのに、Chrome で動作しないのはなぜですか?Access-Control-Allow-Origin:*
d2.example.com
EventSource
$.get("http://d2.example.com")
d1.example.com
2-リダイレクト
私は httpd サーバーを使用しているので、d1.example.com
SSE リクエストを に渡す仮想ホストでリダイレクト ルールを作成しましたd2.example.com
。Firefox で問題なく動作しました。一方、Chrome はエラーを表示せず、SSE サーバーにも接続しませんでした。EventSource
コマンド全体をダンプしたようです。この解決策は決してうまくいかないように見えるので、先に進みましょう...
3- リバース プロキシ
d1.example.com/subscribe
基本的にd2.example.com
リバースプロキシ経由で接続している両方のブラウザが接続されています。ただしon_close
、ブラウザが閉じられていても、イベントはキャッチされません。d2 サーバーがプロキシ サーバーとのチャネルを作成しているため、これは理にかなっています。on_close
イベントをプロキシ サーバーから d2に転送するにはどうすればよいですか?
これを機能させる別の方法はありますか?
javascript - SSE/EventSource を実装する正しい方法は?
作成者がセットアップSSE/EventSource
し、サーバーでPHPスクリプトがデータをエコーアウトして呼び出しob_flush()
、flush()
データをクライアントブラウザーに送り返すチュートリアルをネットで見たことがあります。これは正常に機能し、新しいデータが 3 秒ごとにクライアントにプッシュされます。
しかし、これは SSE の使い方が間違っているというコメントも読みました。この人は、SSE の要点は、サーバーが接続を維持することであり、上記の方法を使用して新しいデータがクライアントにプッシュされる理由は、EventSource がサーバーの切断を認識するためであると述べました。この人は、サーバーはループを使用し、スリープを使用して数秒ごとにデータをプッシュする必要があると述べました。
それで、これは事実ですか?サーバーにループを設けてデータをプッシュし、プッシュのペースを調整することで、SSE を実装する必要がありますか?sleep()
ruby - チェスのようなゲームのための ruby セットアップ
このボードゲームをウェブに持ち込んで、ペットプロジェクトを始めるつもりです。簡単にするために、代わりに対人チェスを想像してください。
この種の非同期プログラミングの経験はほとんどありません。唯一のもの - ストリーミング機能を使用して、sinatra と簡単なチャットを書きました。
密接に関連する 2 つの質問があります。
ゲームの流れをどのように整理すればよいですか? ゲームの状態をデータベースに保存する必要がありますか? または、ゲームなどのクラスを作成し、その中にすべてを保存することはできますか? 2 番目のオプションはより簡単で自然に聞こえますが、クライアント サーバー非同期の性質を持つアプリケーションに実装することは可能でしょうか?
クライアントはサーバーとどのようにやり取りする必要がありますか? ボードの状態をリアルタイムで更新してほしい。js EventSource はここで最適なオプションですか? stream キーワードを持つ Sinatra アプリケーション以外に必要なものはありますか? EventMachine は必要ですか?
php - PHP でサーバー送信イベントを実装するにはどうすればよいですか?
PHP と while ループを使用してサーバー送信イベント スクリプトを設定しましたが、スクリプトを閉じ続けて再ポーリングする必要がなかったので、すべてを while ループに入れました。
問題は、スクリプトが動かなくなったため、そのルートを放棄しなければならず、代わりに node.js websocket バックエンドを使用したことでした。
私の質問は、サーバー送信イベント php スクリプトの作成に戻った場合、どのように実装すればよいですか?
while
ループはスクリプトをハングアップさせるため、それをカットしていないように見えます.1秒ごとに接続および切断するだけであれば、長いポーリングと同じです. SSE メッセージ?