Как я могу запретить серверу приложений RStudio Shiny отправлять обновления статуса "занято / бездействует"?
Наблюдая за трафиком веб-сокета в моем приложении, я заметил, что сервер постоянно отправляет обновления о его текущем состоянии («занято» / «бездействует») .
Состояние сервера: занят / неактивен
Событие «блестящий»: занято, запускается, когда что-то происходит на сервере (например, работает наблюдатель), и событие «блестящий»: неактивный указываеткогда сервер простаивает.Объект события не несет никаких специальных свойств, связанных с Shiny.
Использование Shiny версии 1.1.0 на стороне сервера, Chrome 66 на стороне клиента.
Фонмоего вопроса
У меня такое ощущение, что эта функция может замедлить мое приложение, потому что клиент, похоже, блокируется на несколько секунд после отправки информации на сервер.Трудно воспроизвести, но что происходит (в соответствии с журналом трафика веб-сокета):
- Клиент: пользователь нажимает кнопку действия.
- Клиент: информация действия отправляетсяна сервер без задержки.
- Клиент: Все JavaScript-выполнения останавливаются / пауза на несколько секунд.В этот период взаимодействие с пользователем невозможно.
- Тем временем сервер: пока клиент ожидает, R выполняет некоторые процедуры на стороне сервера.
- Сервер: отправляет обратно пользовательскую информацию клиенту.
- Клиент: отображает информацию в журнале как «получено», но продолжает зависать.
- Сервер: отправляет клиенту еще одно обновление статуса
{"busy":"idle"}
. Это происходит через несколько секунд после появления шагов 5/6 в журнале трафика. - Клиент: Наконец, клиент возвращается к жизни и продолжает выполнять JavaScript и взаимодействие с пользовательским интерфейсом.
Пример кода
Это приложение очень просто показывает проблемную связь с сервером.Я хотел бы уменьшить количество сообщений, поступающих с сервера.
library(shiny)
ui <- fluidPage(
titlePanel("Test"),
sidebarLayout(
sidebarPanel(
actionButton(inputId = "testButton",
label = "Click me")
),
mainPanel(
textOutput(outputId = "testText")
)
)
)
server <- function(input, output) {
observeEvent(input$testButton,{
output$testText <- renderText({
Sys.time()
})
})
}
shinyApp(ui = ui, server = server)
Журнал трафика веб-сокетов:
Обратите внимание:Приведенный выше пример упрощен, описанный эффект длительного периода ожидания там не виден.Тем не менее, нежелательные обновления статуса хорошо заметны.Проблема возникает по мере роста кода приложения, и отключение сообщений о состоянии Shiny потенциально может помочь мне в этих особых ситуациях.