Comment déclencher une actualisation des données en brillant?
J'ai une brillante application qui interroge les données à partir de SQL dans des trames de données, et les trames de données sont référencées à partir de mon shinyServer() de bloc. J'ai été en cours d'exécution que dans RStudio jusqu'à présent, et donc chaque fois que j'avais besoin de nouvelles données que je venais tout juste de redémarrer l'application et avant de la charge du serveur, il pourrait saisir toutes les nouvelles données.
J'aimerais transition à l'application de brillant serveur, mais je ne suis pas sûr de savoir comment je peux l'amener à obtenir de nouvelles données périodiquement. Pour l'amour de l'interface, j'aimerais qu'il soit automatique plutôt que d'avoir un utilisateur de cliquer sur un bouton pour lancer le chargement. Est-il un idiomatiques solution pour cela?
EDIT:
Je crois que j'ai trouvé une solution qui fonctionne pour moi.
shinyServer(function(input,output,session){
sourceData <- reactive({
invalidateLater(1000000,session)
functionThatGetsData()
})
})
source d'informationauteur Patrick McCarthy
Vous devez vous connecter pour publier un commentaire.
Vous êtes à la recherche pour
invalidateLater
. Mettre, avec l'intervalle approprié, dans la réactif expression qui récupère des données à partir de la base de données.Le plus intelligent serait probablement être utiliser
reactivePoll
si vous pouvez faire une rapide requête pour détecter s'il existe de nouvelles données. Cela a fonctionné très bien pour moi aujourd'hui seulement, en fait.Je ne pense pas que ce soit de ces réponses répond pleinement à l'OP de la question. Plus précisément
qui suggère que la mondiale objet a besoin d'être rafraîchi. À l'aide de réactifs à l'intérieur de la fonction de serveur n'est pas une grande réponse à ce problème en colombie-britannique, vous avez une condition de concurrence si plusieurs utilisateurs d'interagir avec l'application simultanément ... tout va essayer de mettre à jour l'objet simultanément, ce qui peut ou ne peut pas résoudre de lui-même en fonction de ce que la mise à jour (c'est quelque chose que je suis activement à la lutte avec).
Une possible solution que j'ai explorée à l'aide du troupeau paquet à chaque utilisateur de tenter d'acquérir un verrou sur un global fichier temporaire et l'utilisateur de la réussite de l'acquisition, il serait chargé de faire la mise à jour globale. Cette traite directement de la condition de la course. Je n'ai pas testé pleinement suffisant pour poster la solution ici, peut-être quelqu'un d'autre peut l'utiliser.