ある種のリアルタイム更新を行う Web サイトを開発しています。これで、データセットの現在の ID の JavaScript 変数を使用して Web サイトが生成されます。次に、数秒間隔で AJAX 呼び出しが行われ、現在の ID が渡されます。新しいものがある場合、サーバーは最新の ID と共にそれを返し、JavaScript で更新されます。非常に単純ですが、ここで問題が発生します。
ユーザーが同じページを複数回開くと、すべてのページがこの AJAX 要求を実行し、サーバー負荷が高くなります。
今、私は次のアプローチについて考えました:
Web サイトには、現在のタイムスタンプと現在のデータセットの ID の JavaScript 変数が読み込まれます。私の希望するリフレッシュ間隔は、たとえば 3 秒です。
Web サイトでは、インターバル カウンターが 1 秒ごとにカウントアップし、タイムスタンプが(timestmap % 3===0)
true を返す状態になるたびに、コンテンツが更新されます。リンクはhttp://www.example.com/refresh.php?my-revision=123×tamp=123456のようになります
これで、すべてのブラウザ ウィンドウが同じ URL を呼び出すようになります。次に、ブラウザ レベルのキャッシュを有効にします。
しかし、私はこの解決策があまり好きではありません。Cookie にデータ共有の別のレイヤーを追加することをお勧めします。これは大きな問題ではありません。すべてのリクエストを、タイムスタンプとデータ リビジョンで名前を付けた Cookie に 10 秒程度の TTL で保存し、最初にその存在を確認するだけで済みます。
しかし
ページは同時にリクエストを実行します。そのため、ブラウザのキャッシュと Cookie のロジック全体が機能しない可能性があります。これは、リクエストが次々にではなく同時に発生するためです。
そこで、現在の接続を 1 つのサーバー側に制限することを考えました。しかし、ページ全体でそれをしたくないので、少なくとも追加の vhost が必要になります。これにより、クロスサイト ポリシーに関する問題が発生します。
もちろん、いくつかの非常に複雑な負荷分散ソリューション/URI や IP アドレスなどを要求するサーバー側のソリューションがありますが、それはすべて極端にやり過ぎです!
それはよくある問題に違いない!Facebookのチャットを考えてみてください。あなたが開いているすべてのウィンドウですべてのリクエストを行うとは本当に思いません...
何か案は?私は本当にこれにこだわっています!
ウィンドウ間の Javascript 通信を行うことはできますか? すべてが同じドメイン上にある場合は問題になりませんか?
もちろん、私ができることはサーバー側のキャッシュです。これにより、少なくともDB接続と集中的な計算が回避されます...しかし、それでも避けたい要求です。