R serveur de diffusion de données

J’essaie d’écrire le démon dans R tel qu’il transmettrait les données à un canal de données et tout pair connecté à ce canal obtiendrait la dernière valeur transmise. J’ai changé le code du serveur à partir d’ ici , donc mon côté serveur a l’air:

server <- function(){ writeLines("Listening...") con <- socketConnection(host="localhost", port = 6011, blocking=TRUE, server=TRUE, open="r+") while(TRUE){ broadcast_msg <- as.character(Sys.time()) writeLines(broadcast_msg, con) Sys.sleep(1) } close(con) } server() 

Côté client, connectez-vous et lisez les lignes:

 con <- socketConnection(host="localhost", port = 6011, blocking=TRUE, server=FALSE, open="r+") server_resp_update <- readLines(con, 1) server_resp_update <- readLines(con, 1) server_resp_update <- readLines(con, 1) 

Le code ci-dessus a deux problèmes:

  1. Daemon attend que le pair se connecte. Cependant, je veux qu’il diffuse les données dans tous les cas.
  2. Lorsque je me connecte et lis les données avec le client plusieurs fois, je reçois les premières lignes envoyées au début après la connexion, mais pas la dernière valeur actualisée.

Il y avait une question similaire dans Python et la réponse était d’inverser le problème en faisant:

  1. Attendez une connexion
  2. Donner un message
  3. allez à l’étape 1

Dans mon cas 2. Donner un message implique un calcul lourd et je ne veux pas le faire pour chaque demande de pair – je veux que le démon le fasse une fois par seconde pour tous ceux qui ont besoin du message.

J’ai réussi à faire fonctionner ce schéma en utilisant un fichier txt, c.-à-d. Que le démon ré-écrit une nouvelle valeur dans le fichier toutes les secondes et que le client lit le fichier quand cela est nécessaire. Pas d’attente pour les pairs impliqués. Cependant, écrire / lire un fichier n’est pas aussi rapide qu’une connexion par socket peut être.