問題タブ [shared-worker]
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.
javascript - 共有ワーカー内で EventSource を実行する方法は?
サーバーからメッセージを受信するためにサーバー送信イベントを実装しました。別の質問でそれをどのように実装したかを説明します
現在、ユーザーが複数のブラウザタブを介してサーバーへの複数の接続を開くのを防ぐために、共有ワーカー内で実行しようとしています。
共有ワーカー内でコードを実行するために私が行ったことは次のとおりです
ファイルcallesworker.js
を作成し、このコードをその中に入れました
次に、HTML ページが読み込まれると、このコードを呼び出します
しかし、コードはサーバーからメッセージを返しません。
EventSource
共有ワーカー内でイベントを正しく実行するにはどうすればよいですか?
javascript - 開いているスクリプトのメッセージをプッシュするために、SharedWorker内でサーバー送信イベントを「1回だけ」開始する方法は?
ほとんど問題なく動作するサーバー送信イベント (SSE)の実装があります。私が抱えている唯一の問題は、「1 人のユーザーがサーバーに多くの接続を持つことができる」ことです。基本的に、ユーザーが複数の Web ブラウザーのタブを開くと、各タブはサーバーに新しいサーバー送信イベント要求を作成し、1 人のユーザーから多くの要求が実行されます。
この問題を解決するには、Javascript のSharedWorker内で SSE を実行したいと考えています。
これは、SharedWorker と通信する SSE が 1 つしかないことを意味します。次に、すべてのページ/Web ブラウザーが SharedWorker と通信します。これにより、ユーザーごとに 1 つの SSE のみを許可するという利点が得られます。
これは、現在、どのタイプのワーカーも使用せずに私の SSE がどのように機能しているかです。
同じセットアップを実行したいと思います。ただし、JavaScript の SharedWorker 内で実行して、ユーザーごとに複数の SSE を排除したいと考えています。
SharedWorker の実装に苦労しています。これが私がこれまでに試したことです
というファイルを作成し、worker.js
このコードを追加しました
次に、メッセージにリストしたいページにこのコードがあります
ここで何が欠けていますか?
私は何を間違っていますか?
実装を修正するにはどうすればよいですか?
編集済み
以下の@Bergiからのコメントに基づいて、コネクタにメッセージを投稿していない実装の更新バージョンを次に示します。コードで何が起こっているのかを理解するために、コードにコメントを追加しました。
ランディング ページで、つまりindex.php
、このように SharedWorker に接続します
これは私のworker1.js
ファイルに含まれているコードです
ここに私の別のバージョンがありますworker1.js
javascript - ShardWorker が Firefox ではなく Google Chrome で実行される理由
ついに、Shared Worker で実行中の Server-Sent Event SSE を実装しました。この実装により、サーバー上で実行されるスクリプトの総数をユーザーごとに 1 つに制限することができました。
ただし、まだいくつかの問題があります。
- は
SharedWorker
FireFox ではまったく動作しませんが、Google Chrome では動作します。私はFirefox v40.0を使用しています。コンソールにエラーは表示されません。コンソールに SSL 証明書に関する警告が表示されますが、エラーは表示されません。FireFoxコンソールからの警告は次のとおりです
このサイトは SHA-1 証明書を使用しています。SHA-1 よりも強力なハッシュ関数を使用する署名アルゴリズムで証明書を使用することをお勧めします。[詳細]
ShardWorker
しばらくアイドルタイムを過ぎると動作しなくなるようです。スクリプトは共有ワーカーなしでファイルを動作させるため、これは PHP スクリプトの問題ではありません。Chrome v44.0 でこの問題が発生しています。シャードワーカーを再開するには、ページをリロードする必要があります。
ShardWorker が停止する原因を特定するにはどうすればよいですか? SharedWorder
FireFox で実行されないのはなぜですか?
これが私の実装です
これは、ハットが呼び出すコードです。SharedWorker
ここにコードがありますworker.js