在SHINY中的用户会话之间共享反应性数据集 [英] Sharing reactive data sets between user sessions in Shiny

查看:32
本文介绍了在SHINY中的用户会话之间共享反应性数据集的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个相当大的反应性数据集,它来自轮询一个文件,然后以预定义的时间间隔读取该文件。数据更新频繁,需要不断重新加载。诚然,重新加载可以递增进行并附加到R中的现有对象,但不是这样。但是,目前,此操作是针对闪亮应用的每个用户执行的,尽管数据在各个会话之间是相同的。

我想出一个周而复始的解决方案的唯一方法是确定会话是否是第一个,并使该会话成为通过轮询更新数据的主会话。如果仍然存在master,则后续会话不会轮询。

是否有更简单的方法可以在不处理此主关系的情况下实现相同的结果?

这几乎类似于代表所有客户端/会话工作的全局函数内部的需要被动调用。

推荐答案

我希望我理解这个问题。我假设所有会话和所有连接的数据集都是相同的。即:如果一个用户更新了数据集,那么它是否也应该针对所有其他会话进行更新?如果是这种情况,我只需在每次某个用户更新数据库时从数据库中读取并写入该数据库即可。如果您有MySQL数据库,您可以使用它。或者,您可以在应用程序中使用特定于应用程序的SQLite数据库文件,并且可以将其与server.rui.r文件以及所有其他特定于应用程序的文件一起保存。

您仍然可以按预定义的时间间隔从数据库读取。这样,您就不会在RAM中保留数据副本,并避免为每个闪亮会话多次加载它。

另一个选项可能是这样。 此外,在您的server.r文件中,您放在shinyServer()函数中的任何内容都将在每次创建会话时运行(即,每次用户将他们的浏览器指向您的应用程序时)。您放在shinyServer()函数之外的任何内容(例如,在最开始时)只会在runApp()命令初始化应用程序时运行一次。因此,如果您将数据集加载到shinyServer()函数之外一次,并将其保存到全局环境变量中,那么所有会话都应该可以访问它。每个会话还需要将其重新保存到全局环境中。

assign("main_df", df, envir = .GlobalEnv)

这篇关于在SHINY中的用户会话之间共享反应性数据集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆