我正在构建一个Web应用程序(使用Fay生成Javascript),用户可以在该应用程序中打开多个选项卡/窗口。我希望所有打开的实例共同托管一个有限状态机,其中所有打开的窗口/选项卡之间只共享一个状态。状态转换由窗口中的事件和超时触发。只要至少有一个窗口仍处于打开状态,就需要进行超时,因此我将它们设置在所有窗口中。
因为我希望这个系统也适用于旧浏览器,我不想使用LocalStorage或工作线程来实现它,所以我试图使用cookie在Windows之间进行通信。我还希望Windows之间的大部分通信都发生在客户端(即我不希望每次状态转换都需要向服务器端发出HTTP请求)。
然而,这会产生竞争条件:所有打开的窗口同时触发超时,并可能覆盖在此状态转换时彼此执行的cookie更改。我可以通过向超时添加噪声并通过在超时被命中时立即设置新状态cookie来减少可能发生竞争条件的窗口,但是因为似乎没有原子方式来读取 - 和 - 更新一个cookie,比赛仍在那里,不太可能发生。
在同一域名的Windows之间进行通信时,Javascript中有哪些跨浏览器,纯客户端同步原语?