94451
Sep 23, 2015, updated at 09:04:14 (UTC)
1420
0
0
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]).
So on etwa ist mein „Server“ Script aufgebaut (Davor läuft noch ein 2. Socketserver [für meine "Steuerungsclients"]))
es gibt eine "disconnect" Funktion... diese Reagiert aber nach meinen Verständnis nur, wenn der Client sagt: „ich geh mal offline“.
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
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]).
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“)
});
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
Please also mark the comments that contributed to the solution of the article
Content-Key: 283652
Url: https://administrator.de/contentid/283652
Printed on: April 25, 2024 at 15:04 o'clock