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? Thanks
promisesandfuturespackages to enable users to doasyncoperations rstudio.github.io/promises/articles/shiny.html - Pork Chopshiny, is single threaded however it can easily support 50k concurrent users at any given time. Wrt to using promises around the server, short answer is probably no. If you want to wrap the app in a "standalone" application look into docker shinyproxy.io - Pork Chop