2016-12-24 39 views
3

我想構建一個R Shiny應用程序,它能夠將信息從一個運行實例傳遞到其他可能的運行實例。到目前爲止,我還沒有找到任何可以幫助我的東西,我希望能夠做到這一點,而不是訴諸全局變量和/或寫入文件等(我在下面的示例中使用了全局變量,我知道它是一個不好的做法;我懷疑寫文件也不是一個好習慣)。單個運行的多個會話之間的交互R Shiny應用程序

因此,舉例來說,假設我有一臺服務器和傑克約翰有它開上運行我的App.R。如何使Tim看到下面的時候,插孔約翰也在同時使用該應用程序,並按下按鈕如下面的例子所示?

App.R:從誰都有一個應用程序實例在其瀏覽器中運行的各個用戶的多個按鈕按下後

library(shiny) 

# Somehow interactively visible variable? (I know global variables are bad, I wouldn't want to use such) 
txt <<- "" 

shinyApp(
    ui = fluidPage(
     textInput("name", "User name", value="USERNAME"), 
     actionButton("button", "Button"), 
     htmlOutput("text") 
    ), 
    server = function(input, output, session){ 
     a <- eventReactive(input$button, { 
      txt <<- paste(txt, "Button pressed by", input$name, "at", Sys.time(), "<br>") 
      txt 

     }) 
     output$text <- reactive({ 
      HTML(a()) 
     }) 
    } 
) 

例所需的輸出(全部具有獨特的輸入$名稱選擇,但顯然是獨一無二的會話ID會更好):

Example user case

任何有識之士將不勝感激,謝謝!

+1

我不認爲你可以讓會話與其他人進行交互,但我已經構建了一些將事件寫入數據庫的應用程序。應用程序中的某些操作將調回查詢並提取其他併發用戶所做的任何新更改。 – Benjamin

+0

這似乎是一個可能的解決方案,雖然我希望有一些直接交互的方式。我想我可能不得不建立一些基於SQL的解決方案以傳遞信息,這絕對是即使超越R Shiny也能做到的一種方式。需要考慮一下,謝謝! –

回答

3

我已經在一個閃亮的服務器實例上測試了您的代碼,它的工作方式與預期相同:即,我得到的打印輸出類似於您要求的打印輸出。

我有點困惑re:你到底在找什麼?

不管怎樣,作爲一個一般性意見我會不同意,使用<<-是錯誤的,或者global variables(一般或有光澤的應用程序)是

他們有自己的位置,實際上典型的用例是跨會話/用戶傳遞狀態。

另一種方法是使用shinyreactiveValues爲:

values <- reactiveValues() 
values$lognames <- '' 
... 
ui <- (...) 

server <- function(input, output, session){ 

a <- eventReactive(input$button, { 
values$lognames <- paste(values$lognames, "Button pressed by", input$name, "at", Sys.time(), "<br>") 
values$lognames 
}) 
... 
} 

但作爲一般值得注意的問題,這種類型的設計,雖然有可能,最終可能帶來有狀態到應用程序,迅速崛起的複雜性和違背reactive範式的簡單性。

我強烈的建議是在這條路上的每一步之前真正仔細思考。我有過實施閃亮應用的經驗,這些應用隨着這些states的泛濫而迅速升級。我不得不跟蹤所有狀態變化導致脆弱,難以調試的應用程序。

+0

你好,謝謝 - 代碼有效,但問題是,這些消息中的每一條都應該由R Shiny App的單獨運行實體發送。假設「蒂姆」會住在另一個國家,他的輸入$名稱如上所示,他正在運行他的應用程序。然後名爲「John」的其他人同時使用該應用程序(例如來自另一個國家),我希望能夠在這些單獨的會話之間發送信息;舉個例子,比方說,我想通過傳遞他們的短信來爲使用R Shiny的多人建立一個實時聊天室。 –

+1

傑夫艾倫,RStudio員工和閃亮的服務器開發人員在這裏有一個聊天室的例子:https://github.com/trestletech/ShinyChat/blob/master/server.R。這是我學會使用'reactiveValues'的地方! – Enzo

+0

謝謝,這聽起來很有希望! :)要檢查出來 –

相關問題