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:
Il y avait une question similaire dans Python et la réponse était d’inverser le problème en faisant:
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.