matbarofex / rRofex

R library to connect to Matba Rofex's Trading API. Functionality includes accessing account data and current holdings, retrieving investment quotes, placing and canceling orders, and getting reference data for instruments.
https://matbarofex.github.io/rRofex
Other
25 stars 14 forks source link

New Feature: Posibilidad de seteo de tiempo para enviar heartbeat/ping al servidor para mantener la conexión WS abierta #24

Closed soberto closed 11 months ago

soberto commented 3 years ago

ESCENARIO

Realizando pruebas en entorno remarkets, se observa desconexión de los conectores WS.

Fue sugerido por interlocución con gente de MR realizar pings o envair mensajes tipo heartbits para evitar esto, consiguientemente sería útil contar con dicha funcionalidad en al librería, y que se cuente con una propiedad que parametrice cada cuánto se envía el mensaje/ping correspondiente para mantener la conexión alive.

augustohassel commented 3 years ago

@soberto cómo se te ocurre que se puede implementar esto? De la forma en que lo armé, se vuelve a abrir la conexión si es que se cierra. Pero no vi algo para setear un heartbeat en la librería websocket. Se me escapa un poco y necesitaría ayuda =)

soberto commented 2 years ago

Buenas @augustohassel !

Yo para solucionar lo de los pings utilizo esto:

i <- 0
ws_alive = function(interval = 30) {
  #i <<- i + 1
  if(i <= 72){
#    print("envío de mensajes para mantener viva la conexión") #opcional para ver notificaciones de envío....

    walk(
      .x = names(rRofexWebsockets),
      .f = ~ get(envir = rRofexWebsockets, .x)$send(charToRaw("ping"))
    )
    later::later(ws_alive, interval)
  }
}

ws_alive()

Básicamente busca en el entorno donde por default se almacenan los WS de rRofex y envía el ping.

Está sucio con un bucle pero la idea se ve.

Requiere de este paquete:

library(later)

Saludos!