4

我正在构建一个 Web 应用程序(使用 Fay 生成 Javascript),用户可以在该应用程序中打开多个选项卡/窗口。我希望所有打开的实例共同托管一个有限状态机,其中所有打开的窗口/选项卡之间只有一个状态共享。状态转换由窗口中的事件和超时触发。只要至少有一个窗口仍然打开,就需要发生超时,所以我在所有窗口中都设置了它们。

因为我希望这个系统也能在旧版浏览器上运行,所以我不想使用 LocalStorage 或 Worker Threads 来实现它,所以我尝试使用 cookie 在窗口之间进行通信。我还希望窗口之间的大部分通信发生在客户端(即,我不希望每次状态转换都需要对服务器端的 HTTP 请求)。

但是,这会产生竞争条件:所有打开的窗口同时触发超时,并可能覆盖彼此在此状态转换时执行的 cookie 更改。我可以通过在超时中添加噪音并在超时时设置新的状态cookie来减少可能发生竞争条件的窗口,但是因为似乎没有一种原子方式来读取和-更新 cookie,比赛仍然存在,只是不太可能发生。

在同一域上的窗口之间进行通信时,Javascript 中有哪些跨浏览器、纯客户端同步原语?

4

0 回答 0