【问题标题】:Receive push data in R Shiny application在 R Shiny 应用程序中接收推送数据
【发布时间】:2016-08-17 10:41:39
【问题描述】:

我有一个简单的 python 程序,它应该将其数据推送到 R Shiny 应用程序中。 Shiny 中的这些行解析“GET”输入:

  # Parse the GET query string
  output$queryText <- renderText({
    query <- parseQueryString(session$clientData$url_search)
    eventList[query$eventid] <<- query$event
  })

这适用于调用“http://127.0.0.1:5923/?eventid=1223&event=somestring”的浏览器。如果我尝试在 python 中调用 URL,我会在 R 中得到“由对等方重置的连接”,并且没有任何内容添加到列表中。到目前为止我的 Python 代码:

request = urllib2.Request("http://127.0.0.1:5923/?eventid=1223&event=somestring")
test = urllib2.urlopen(request)

有谁知道如何让它工作或有更好的解决方案将数据从外部推送到 R Shiny 应用程序?

感谢您的帮助!

【问题讨论】:

  • 与闪亮的应用程序交互的客户端需要处理 javascript/websockets,据我所知 urllib2 库没有。
  • 闪亮的应用程序是客户端-服务器应用程序,所以你需要运行 Javascript 的东西。一个潜在的候选人是github.com/niklasb/dryscrape另一个潜在的解决方案seleniumhq.org
  • 感谢您的 cmets。我通过使用 httpuv 和创建 websocket 服务器解决了我的问题。可在此处找到示例:github.com/rstudio/httpuv/blob/master/demo/daemon-echo.R
  • @tanktoo 这是一个非常有趣的方法。如果您可以将您的解决方案写成答案,它将在未来帮助其他人。
  • @warmoverflow 完成

标签: python r get shiny shiny-server


【解决方案1】:

我使用带有 httpuv 的 websockets 的完整解决方案:

library(httpuv)
startWSServer <- function(){
   if(exists('server')){
      stopDaemonizedServer(server)
   }
   app <- list(
      onWSOpen = function(ws) {
         ws$onMessage(function(binary, message) {
            #handle your message, for example save it somewhere 
            #accessible by Shiny application, here it is just printed
            print(message)
            ws$send("message received")
         })
      }
   )
   server <<- startDaemonizedServer("0.0.0.0", 9454, app)
}

stopWSServer <- function(){
   stopDaemonizedServer(server)
   server <<- NULL
}

希望这会有所帮助;)

【讨论】:

    猜你喜欢
    • 2017-04-27
    • 2018-06-07
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多