94451
Goto Top

Offline Clients im Socketserver erkennen

Hallo,

ich habe mir auf Ubuntu einen Socketserver aufgebaut (node.js 4.1.0 und socket.io 1.3.6). Mit Arduinos habe ich eine Kommunikation hergestellt sodass ich z.B. Temperaturwerte lesen oder Helligkeit / Farbwerte [für LEDs] schreiben kann.

Kurze Erklärung für diejenigen die nicht wissen was ein Arduino ist (mir aber evtl. trotzdem helfen können / wollen) Arduino ist eine Plattform mit einen Microcontroller, in C Programmiert kann man hier so ziemlich alles was das Herz begehrt in der Digital und Analogtechnik anstellen, mit Netzwerkschnittstelle kommt man z.B. der Hausautomation ziemlich nahe.

Soweit funktioniert auch alles gut. Allerdings wenn ein Client offline geht, und damit meine ich nicht, Arudino: „Ich mach mich mal weg“, sondern eher wenn z.B. ein Netzwerkkabel getrennt wird oder der Arduino komplett (ohne etwas zu sagen) aus geht, dann bekommt der Server davon „erst mal“ nichts mit (erst wenn der Cient wieder da ist und sich versucht neu anzumelden, wirft der Server nen Error [hier kann ich dann den alten entfernen]).

back-to-top Wie kann ich erkennen, dass mein Client offline ist?

So on etwa ist mein „Server“ Script aufgebaut (Davor läuft noch ein 2. Socketserver [für meine "Steuerungsclients"]))
//tcp socket server
var tcpServer = net.createServer(function (socket) {});

tcpServer.on('connection',function(socket){  
    socket.write('connected to the tcp server\r\n');  
    console.log('num of connections on port 1337: ' + tcpServer.connections);  

    tcpGuests.push(socket);


    socket.on('data',function(data){  
        console.log('received on tcp socket:'+data);  
        socket.write(' msg received\r\n');  


        //send data to guest socket.io chat server
        for (g in io.clients) {
            var client = io.clients[g];
            client.send({message:["arduino",data.toString('ascii',0,data.length)]});  
          }
    })
});
tcpServer.listen(1337);


es gibt eine "disconnect" Funktion... diese Reagiert aber nach meinen Verständnis nur, wenn der Client sagt: „ich geh mal offline“.
.on(‘disconnect‘, function(){
Console.log(“ein client verabschiedet sich“)
});
Diese habe ich auch bereits außerhalb und innerhalb meiner .on(‘connection‘ …) versucht. Brachte aber leider nicht den gewünschten Erfolg.

Ein möglicher Weg wäre es einfach alle Sekunden dem Arduino eine Frage zu stellen auf die er Antworten soll, bleibt die Antwort über 3 Sekunden aus, ist dieser offline…
Aber ich hätte gerne „keine“ 3 Sekunden delay… Und vorallem eine "saubere Lösung"

Hat jemand eine Idee für mich?

Vielen Dank

Content-Key: 283652

Url: https://administrator.de/contentid/283652

Printed on: April 25, 2024 at 15:04 o'clock