ユーザーがアプリに対して複数のタブ/ウィンドウを開くことができるWebアプリケーションを構築しています(Fayを使用してJavascriptを生成します)。開いているすべてのインスタンスで、開いているすべてのウィンドウ/タブ間で共有される状態が 1 つだけある有限状態マシンをまとめてホストする必要があります。状態遷移は、ウィンドウ内のイベントおよびタイムアウトによってトリガーされます。少なくとも 1 つのウィンドウがまだ開いている限り、タイムアウトが発生する必要があるため、すべてのウィンドウでタイムアウトを設定しました。
このシステムを古いブラウザでも動作させたいので、LocalStorage や Worker Threads を使用して実装したくないので、代わりに Cookie を使用してウィンドウ間の通信を試みています。また、ウィンドウ間のこの通信のほとんどをクライアント側で行う必要があります (つまり、状態遷移ごとにサーバー側への HTTP 要求を要求する必要はありません)。
ただし、これにより競合状態が発生します。開いているすべてのウィンドウが同時にタイムアウトをトリガーし、この状態遷移で相互に実行された Cookie の変更を上書きする可能性があります。タイムアウトにノイズを追加し、タイムアウトになるとすぐに新しい状態 Cookie を設定することで、競合状態が発生する可能性のあるウィンドウを減らすことができますが、読み取りと読み取りのアトミックな方法がないように思われるためです。 Cookie を更新しても、競合は依然として存在しますが、発生する可能性は低くなります。
同じドメインのウィンドウ間で通信するときに、Javascript で使用できるクロスブラウザーの純粋にクライアント側の同期プリミティブは何ですか?