r - 如何在 rstudio/websocket 中返回 event$data

标签 r websocket r6

我正在尝试使用发送一些数据并返回消息的方法来扩展websocket::Websocket,以便我可以将其分配给一个对象。我的问题与 https://community.rstudio.com/t/capture-streaming-json-over-websocket/16986 几乎相同。不幸的是,该用户从未透露他们自己是如何解决这个问题的。我的想法是让 onMessage 方法返回 event$data,即类似:

my_websocket <- R6::R6Class("My websocket",
                             inherit = websocket::WebSocket,
                             public = list(
                               foo = function(x) {
                                 msg <- super$send(paste("x"))
                                 return(msg)
                               }                         )
)
load_websocket <- function(){
  ws <- my_websocket$new("ws://foo.local")
  ws$onMessage(function(event) {
    return(event$data)
  })
  return(ws)
}

my_ws <- load_websocket()
my_ws$foo("hello") # returns NULL

但是在花了一个小时研究 Websocket 源代码之后,我仍然完全不知道回调到底发生在哪里,“R 环境方面”。

最佳答案

您需要使用 super 赋值运算符<<-<<-与闭包结合使用以维持状态最有用。与始终在当前级别起作用的通常单箭头赋值( <- )不同,双箭头运算符可以修改父级别中的变量。

my_websocket <- R6::R6Class("My websocket",
                             inherit = websocket::WebSocket,
                             public = list(
                               foo = function(x) {
                                 msg <<- super$send(paste("x"))
                                 return(msg)
                               }                         )
)
load_websocket <- function(){
  ws <- my_websocket$new("ws://foo.local")
  ws$onMessage(function(event) {
    return(event$data)
  })
  return(ws)
}

my_ws <- load_websocket()
my_ws$foo("hello")

关于r - 如何在 rstudio/websocket 中返回 event$data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64434415/

相关文章:

java - 如何将 spring-data-rest 与 spring websocket 混合到一个实现中

php - 使用 PHP 连接到 Ratchet 网络套接字服务器

python - 在 R6 的初始化中调用 R6 类的函数

html - Rmarkdown 'saving' html页面的确切位置

r - R 中 igraph 的边缘条件

node.js - 当客户端刷新或打开新页面时,Socket.io 在客户端保持连接

r - 在 RStudio 的 R 包中记录 R6 类和方法

r - 在 R 中如何对 R6 对象数组进行排序

r - 如何在函数内调用动态变量名?

r - 有选择地为 R 中的函数提供参数的优雅方式?