连接多个用户的 R 闪亮会话

Jon*_*bie 8 session r user-management shiny

最小可重现示例:

library("shiny")

ui <- fluidPage(
  actionButton("button1", "Run 1"),
  actionButton("button2", "Run 2")
)

server <- function(session, input, output) {
  cat("session starts\n")
  observeEvent(input$button1, {
    cat("1 starts\n")
    Sys.sleep(15)
    cat("1 stops\n")
  })

  observeEvent(input$button2, {
    cat("2 starts\n")
    Sys.sleep(15)
    cat("2 stops\n")
  })
}

shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)

每个按钮都模拟运行一些长时间占用 CPU 的算法。

  1. 运行应用程序并在一个浏览器选项卡上打开一个会话。
  2. 打开另一个浏览器选项卡,其中包含正在运行的应用程序的另一个会话。
  3. 在第一个选项卡中启动运行 1 。转到第二个浏览器选项卡并启动Run 2

问题:第二个按钮观察器无法独立启动。它会等到第一个会话中的第一次运行完成。我认为闪亮的会话是独立的。shiny 如何处理每个 R 会话的多个shiny 会话?如果多个用户想要同时连接到应用程序怎么办?

如何处理多个用户同时运行同一个应用程序?谢谢

Ash*_*Ash 2

限制每个工作进程的连接数,即为每个用户提供自己的 R 工作进程。您可以通过将每个工作进程允许的并发连接数设置为 1 来实现此目的。

如果您通过shinyapps.io部署您的应用程序,说明和更多背景信息如下: https: //shiny.rstudio.com/articles/scaling-and-tuning.html

如果您要部署到自己的闪亮服务器,则说明和更多背景信息如下: https://support.rstudio.com/hc/en-us/articles/220546267-Scaling-and-Performance-Tuning-Applications-in-Shiny -服务器专业版

最小工作示例:

library("shiny")

ui <- fluidPage(
  actionButton("button1", "Run 1"),
  actionButton("button2", "Run 2")
)

server <- function(session, input, output) {

  observeEvent(input$button1, {

    withProgress(message = 'Run 1', detail = '', value = 0, {
        for (i in 1:15) {
            incProgress(1/15)
            Sys.sleep(0.25)
        }
    })

  })

  observeEvent(input$button2, {

    withProgress(message = 'Run 2', detail = '', value = 0, {
        for (i in 1:15) {
            incProgress(1/15)
            Sys.sleep(0.25)
        }
    })

  })
}

shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)