我有许多日复一日地为许多企业运行的Web应用程序。
应用程序是在远程apache服务器上运行的PHP / MySQL / JS。
多年以来,我一直在深夜不使用该软件时执行更新。
我希望能够在工作时间内对软件进行更新。
我多次要求我的客户确保他们在晚上关闭软件并关闭他们的浏览器-但永远不能保证他们这样做。
我在JS中有一个刷新计时器,可以阻止浏览器在11:59刷新-如果碰巧仍然打开。
但是我希望能够在需要时对所有打开的浏览器执行此刷新。
我已经考虑了几种方法,包括可以读取和重置的cron和数据库值-但是:
我想知道是否有人成功实现了这一目标?
答案 0 :(得分:4)
您想刷新所有指向xAMP-ish应用程序的打开的浏览器选项卡。一些问题:
是否需要立即进行刷新,或者可以推迟刷新?也就是说,无论用户如何交互,每个人的标签都需要同时刷新吗?还是等到每个客户的下一个请求都可以接受?
您可以提前安排刷新(例如,至少有1个会话超时间隔提前时间),还是需要立即触发刷新的方法?
如果您需要立即刷新,并且没有提前安排,那么您就不走运了。唯一的方法是保持开放的通道,以从服务器到客户端进行异步更新,而使用普通的Apache / PHP很难做到这一点(请参见comet,websockets)。
如果可以推迟刷新(等到用户提交请求),则有几种选择。例如,您可以
/var/lib/php/sessions/
中找到)。请注意,您的用户不会喜欢丢失购物车中的内容。version
值(在登录时加载,并保存在localStorage
或类似值)是否与服务器的传入回复(将从配置文件加载该值)相符或数据库请求)。如果服务器端值已更改,请将可以保存的任何内容保存到localStorage(以避免出现前一种情况),通知用户并刷新页面。或者,如果您可以通过足够的预警来安排刷新,则可以在服务器答复中包含说明,这些说明将在需要时调用刷新机制。例如,此类回复可能会将您当前的“在11:59:59重置”代码更改为“在$ requested_reset_time重置”。
答案 1 :(得分:0)
据我所知,您希望控制用户何时看到“新鲜”内容以及何时可以缓存内容。如果是这样的话 在您的头部内容中添加以下内容-
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
在收到此标头后,用户的浏览器将自动获取新内容。您可以打开/关闭上述行以满足您的需求。这可能不是实现所需功能的最复杂的方法,但值得尝试。
答案 2 :(得分:0)
在做这样的事情之前,有很多事情要考虑。例如,如果某人正在积极地处理页面,可能是填写表格或其他内容,而您能够刷新其窗口,则可能会带来负面的用户体验。我相信这里的其他一些答案也可以解决其他一些问题。
也就是说,通过使用Launch Darkly功能标志服务,我知道它可以完成。不幸的是,我不了解所有内部工作原理,但是我的理解是该服务使用可观察对象来监视更新。可观察对象与承诺相似,不同之处在于它们不断关注目标的新变化。然后,当目标更新时,您可以强制重新加载页面(或者向用户发出警报,提示您)。