我已经在 shinyapps.io 中部署了一个应用程序并且工作正常。
我只运行应用程序5分钟,但当我检查指标时,它显示运行时间约为0.7小时。我发现有一个15分钟的默认空闲时间,我已经改为5分钟(最小)。我还注意到,即使在关闭闪亮应用程序的浏览器窗口后,它仍然显示应用程序在我的仪表板中运行。
我假设应用程序在浏览器窗口关闭时不会停止运行,只有在满足空闲时间条件时它才会停止。
有什么方法可以在浏览器窗口关闭时停止闪亮的应用程序?以下代码是否适用于此实例?
session$onSessionEnded(function() {
stopApp()
})
答案 0 :(得分:7)
我不知道shinyapps.io,但在R中(正如您的标记所示),您确实可以通过shinyApp
停止onSessionEnded
。以下是最小的工作示例。
rm(list=ls())
library(shiny)
doshiny <- function() {
app=shinyApp(
ui = fluidPage(
textInput("textfield", "Insert some text", value = "SomeText")
),
server = function(input, output, session) {
session$onSessionEnded(function() {
stopApp()
})
}
)
runApp(app)
}
openshiny <- function() {
doshiny()
print("Finished.")
}
openshiny()
答案 1 :(得分:1)
我添加了这个inactivity
JS代码来帮助我处理一些IDLE的闪亮应用程序。在我跟踪鼠标移动和点击时,代码几乎是自我解释的。请注意,此应用将在5秒后关闭。
library(shiny)
library(leaflet)
inactivity <- "function idleTimer() {
var t = setTimeout(logout, 5000);
window.onmousemove = resetTimer; // catches mouse movements
window.onmousedown = resetTimer; // catches mouse movements
window.onclick = resetTimer; // catches mouse clicks
window.onscroll = resetTimer; // catches scrolling
window.onkeypress = resetTimer; //catches keyboard actions
function logout() {
window.close(); //close the window
}
function resetTimer() {
clearTimeout(t);
t = setTimeout(logout, 5000); // time is in milliseconds (1000 is 1 second)
}
}
idleTimer();"
ui <- fluidPage(
tags$script(inactivity),
leafletOutput("mymap")
)
server <- shinyServer(function(input,output,session){
points <- eventReactive(input$recalc, {
cbind(rnorm(40) * 2 + 13, rnorm(40) + 48)
}, ignoreNULL = FALSE)
output$mymap <- renderLeaflet({
leaflet() %>%
addProviderTiles(providers$Stamen.TonerLite,options = providerTileOptions(noWrap = TRUE)) %>%
addMarkers(data = points())
})
})
runApp(list(ui = ui, server = server))