Minimal reproducible example:
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)
Each button simulates running some long cpu-intensive algorithm.
- Run the app and open a session on one browser tab.
- Open another browser tab with another session for the running app.
- Start Run 1 in the first tab. Go to the second browser tab and start the Run 2.
The problem:
The second button observer does not start independently. It waits until the first run is finished in the first session. I thought that shiny sessions are independent. How does shiny handle multiple shiny sessions per single R session? What if multiple users want to connect to the application at the same time?
How does one handle multiple users running the same app at the same time?