websocket 自动刷新页面在一天中的特定时间或弹出一个消息来刷新

a11xaf1n  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(144)

我们有一个使用React和NodeJS构建的生产Web应用程序。它用于iPad上的生产环境。当工人完成一个托盘时,他们将为该订单点击“加1”,以统计给定订单的托盘。
问题是,当他们第一次拿起iPad开始一天的工作时,在他们刷新页面之前,上一个班次的旧订单仍然会显示在页面上。因此,如果他们忘记刷新页面,他们将在不再打开的订单上“加1”,并导致问题。所以我在想办法。我的两个想法是在他们开始轮班之前自动刷新页面,每天在特定的时间。或者至少弹出一条消息,“您需要刷新页面”。
什么是解决这个问题的办法?如果在发送刷新或弹出消息的信号时,iPad是关闭的呢?
我在这个应用程序中使用了websockets。所以这也是一种选择。

kx7yvsdv

kx7yvsdv1#

我们也有类似的需求,而且确实涉及到一些业务决策(如果你事先不知道客户端何时需要重置其状态,你通常需要像WebSocket这样的服务器到客户端的通信),但是如果你事先知道(在你的描述中:在固定的工作班次之间),那么一个非常简单的解决方案包括定期检查当前时间与该时间限制,并在超过该时间限制时重置状态(刷新、路由到主页、显示弹出消息等)。
例如在React中:

import { useInterval } from "@reactuses/core";

const timeLimit = new Date(); // Computed locally or retrieved from server

function App() {
  useInterval(() => {
    if (new Date() >= timeLimit) {
      // Reset state / refresh / route to home page / etc.
      window.location.reload();
    }
  }, 10 * 60 * 1000); // Check every 10 minutes

  return null;
}

注意:避免在浏览器中出现太长的延迟,因为它们并不完全可靠。
你也可以检查页面何时再次激活,通常使用"visibilitychange"事件,或者在React中,例如。使用reactuses useDocumentVisibility钩子:

import { useDocumentVisibility } from "@reactuses/core";

const timeLimit = new Date(); // Computed locally or retrieved from server

function App() {
  const visibility = useDocumentVisibility("hidden");

  useEffect(() => {
    if (visibility === "visible" && new Date() >= timeLimit) {
      // Reset state / refresh / route to home page / etc.
      window.location.reload();
    }
  }, [visibility]);

  return null;
}

相关问题