我在部署到AWS的Docker容器中有一个Shiny应用程序。
遗憾的是,我无法提供完全可重现的示例,因为此处有许多移动部件,window with id="Gradle" is already registered
文件,连接到我们SQL数据库的应用程序,连接到AWS的信息等等。
但是,Dockerfile会安装所有必需的依赖项,最后只需通过app.R
Rscript
运行Shiny应用程序。
这部署得很好,我可以通过分配它的网址访问它。
但是,如果用户切换到新窗口,更改标签太长时间,或者将其闲置太长时间,则应用程序会超时并执行熟悉的"灰化"闪亮的应用程序。
当我shiny::runApp('.', host='0.0.0.0', port=8080)
时,有没有办法防止这种情况发生?我没有在文档中找到任何超时参数。
答案 0 :(得分:1)
上下文:Shiny 使用 websocket (RFC 6455) 进行持续的客户端-服务器通信。如果出于某种原因,此 websocket 连接断开连接,则用户体验将被描述为“灰显”。 根据您的设置,发生这种情况的可能性有多种,其中一种可能性最大:代理或负载平衡器设置了意外的 http 超时值。
答案:根据我们自己的设置,使用 Kubernetes 和 nginx-ingress 的独立 Shiny 应用程序(不涉及 Shiny 服务器),默认设置允许最长 60 秒的延迟连接。我们能够通过在清单中添加以下注释来操纵这种行为:
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/proxy-read-timeout: '3600'
nginx.ingress.kubernetes.io/proxy-send-timeout: '3600'
请注意,根据您的配置,可能会涉及更多代理,这可能会使事情复杂化(不要问我怎么知道......)。
或者您可以尝试通过向 Shiny 应用程序添加心跳机制来防止任何超时。 in this issue on GitHub 讨论了一些这样做的方法。