如何通过关闭浏览器窗口停止运行闪亮的应用程序?

时间:2016-02-10 03:26:07

标签: r shiny shinydashboard

我已经在 shinyapps.io 中部署了一个应用程序并且工作正常。

我只运行应用程序5分钟,但当我检查指标时,它显示运行时间约为0.7小时。我发现有一个15分钟的默认空闲时间,我已经改为5分钟(最小)。我还注意到,即使在关闭闪亮应用程序的浏览器窗口后,它仍然显示应用程序在我的仪表板中运行。

我假设应用程序在浏览器窗口关闭时不会停止运行,只有在满足空闲时间条件时它才会停止。

有什么方法可以在浏览器窗口关闭时停止闪亮的应用程序?以下代码是否适用于此实例?

session$onSessionEnded(function() {
    stopApp()
  })

2 个答案:

答案 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))