我正在尝试使用发送一些数据并返回消息的方法来扩展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/