es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo evitar que una ventana de R Shiny se “agote” en un navegador?

Mantengo un paquete de R que realiza análisis prolongados a través de una aplicación Shiny. Carga datos desde un archivo, realiza un análisis (mostrando una barra de progreso al usuario) y luego muestra los resultados.

Cuando inicio la aplicación a través de RStudio, ejecutándola en el navegador Google Chrome, y dejo corriendo un análisis durante la noche, el script sigue ejecutándose, mostrando salidas regulares en la terminal de R. Sin embargo, cuando visito la ventana de Chrome por la mañana, la ventana muestra la aplicación en su estado inicial (es decir, no hay evidencia de que se haya abierto un archivo o se hayan iniciado análisis).

Presumo que Chrome está tratando la pestaña como inactiva, “dormida” y luego vuelve a iniciar la pestaña (rompiendo la conexión original con la sesión de R) cuando la vuelvo a visitar.

Me gustaría que el paquete sea lo más sencillo posible para que los usuarios lo utilicen, por lo que espero encontrar una solución que no implique manipular la configuración del navegador (los usuarios finales también pueden utilizar otros navegadores). ¿Hay alguna forma de configurar una aplicación Shiny para evitar este comportamiento?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Hay algunas soluciones a este problema, pero una posible solución sería implementar un tiempo de espera de sesión o una función de mantener activa en la aplicación Shiny. Esto evitaría que la sesión se termine debido a la inactividad por parte del navegador.

    Una forma de implementar esto es utilizando la función session$setTimeout() en la función del servidor de la aplicación Shiny. Por ejemplo, podrías establecer el tiempo de espera de sesión en 12 horas (o cualquier duración deseada) con el siguiente código:

    server <- function(input, output, session) {
      # establecer el tiempo de espera de sesión en 12 horas
      session$setTimeout(43200000)
    
      # resto de la lógica del servidor aquí
    }
    

    Alternativamente, podrías implementar una función de mantener activa utilizando JavaScript en la interfaz de usuario de la aplicación Shiny. Esto enviaría periódicamente una solicitud al servidor para mantener la sesión activa, incluso si el usuario no está interactuando activamente con la aplicación. Aquí tienes un ejemplo de implementación:

    ui <- fluidPage(
      # agregar código JavaScript para enviar una solicitud de mantener activa cada 10 minutos
      tags$script('
        setInterval(function() {
          $.get("/", function(data) {
            console.log("solicitud de mantener activa enviada");
          });
        }, 600000); // 10 minutos
      '),
    
      # resto del código de la interfaz de usuario aquí
    )
    

    Este código enviaría una solicitud GET a la URL raíz de la aplicación cada 10 minutos, lo que debería mantener la sesión activa y evitar que el navegador la termine.

    Ambas soluciones deberían ayudar a prevenir el problema de que el navegador termine la sesión de la aplicación Shiny, sin necesidad de realizar cambios en la configuración del navegador por parte del usuario final.

Comments are closed.