#r #websocket #rstudio
#r #websocket #rstudio
Вопрос:
Я использую тот же метод для подключения к серверу websocket, что и здесь https://cran.r-project.org/web/packages/websocket/readme/README.html
Однако вывод имеет следующую структуру с использованием ws$connect()
функции
> ws$connect()
Connection opened
send login request
Got Message [{"ID":1,"Type":"Refresh","Domain":"Login","Key":{"Name":"XXXX","Elements":{"AllowSuspectData":1,"ApplicationId":"XXX","ApplicationName":"XXX","AuthenticationErrorCode":XXX,
"AuthenticationErrorText":{"Type":"AsciiString","Data":null},"AuthenticationTTReissue":XXX,"Position":"XXX","ProvidePermissionExpressions":1,"ProvidePermissionProfile":0,"SingleOpen":1,"SupportEnhancedSymbolList":1,"SupportOMMPost":1,"SupportPauseResume":0,"SupportStandby":0,"SupportBatchRequests":7,"SupportViewRequests":1,"SupportOptimizedPauseResume":0}},"State":{"Stream":"Open","Data":"Ok","Text":"Login accepted by host XXX"},"Elements":{"PingTimeout":XX,"MaxMsgSize":XXX}}]
#here starts part, which is needed to be saved (Price1-3)
Single Message
{"ID":2,"Key":{"Name":"XXX"},"View":["Price1","Price2","Price3"]}
Got Message [{"ID":2,"Type":"Refresh","Key":{"Service":"XXX","Name":"XXX"},"State":{"Stream":"Open","Data":"Ok","Text":"*All is well"},"Qos":{"Timeliness":"XXX","Rate":"XXX"},"PermData":"XXX","SeqNumber":4000,"Fields":{"Price1":16.255,"Price2":16.345,"Price3":5}}]
$onMessage()
Функция следующая (с # я отметил строки, которые я добавил, источник: https://github.com/Refinitiv/websocket-api/blob/master/Applications/Examples/R/market_price_authentication.R)
test1<-NULL
ws$onMessage(function(event) {
cat("Got Message",event$data,"n")
jsonresp <- fromJSON(event$data, simplifyDataFrame=FALSE)
#test1<-event$data
#event$data
for (singleMsg in jsonresp){
process_message(singleMsg) # Single Message send pong
}
}
)
Как я могу сохранить выходные данные этой функции?
Комментарии:
1. Из онлайн-документации похоже, что вам нужно переопределить
onMessage()
функцию для сохранения / обработки сообщений по мере их получения.2. @Limey Я обновил вопрос и добавил эту функцию в нижнюю часть вопроса. с помощью строк # market, которые я пытался сохранить, но они не были сохранены.
Ответ №1:
Я работал над той же проблемой
найдите решение с помощью shiny:
library(httpuv)
library(promises)
library(websocket)
library(shiny)
ui <- fluidPage(
titlePanel("title panel"),
sidebarLayout(position = "right",
sidebarPanel("sidebar panel"),
mainPanel(
textOutput("selected_var")
)
)
)
server <- function(input, output) {
MSG <- reactiveValues()
s <- startServer("0.0.0.0", 8081,
list(
onHeaders = function(req) {
# Print connection headers
cat(capture.output(str(as.list(req))), sep = "n")
},
onWSOpen = function(ws) {
cat("Connection opened.n")
ws$onMessage(function(binary, message) {
print(message)
MSG$A <- message
ws$send(message)
})
ws$onClose(function() {
cat("Connection closed.n")
})
}
)
)
output$selected_var <- renderText({
paste("Grasshopper Sended:", MSG$A)
})
}
shinyApp(ui = ui, server = server)