# Dauerhaft offene Socket-Verbindung?



## renwal (6. Dez 2013)

Hallo!

Für meine Klimasteuerung arbeite ich gerade an den Netzwerk-Features. Das Szenario ist folgendes: Die einzelnen Steuerungen sind in ein Netzwerk eingebunden. Es gibt einen Server, der die ganzen Konfigurationen beinhaltet, alle Steuerungen verwaltet und auch das Haupt-GUI bereitstellt, mit dem alle Steuerungen überwacht werden.
Jetzt soll sich also jede Steuerung beim Booten beim Server anmelden, authentifizieren und ihre Konfigurationsdaten abholen. Wenn sich jetzt der Zustand eines angeschlossenen Gerätes ändert, soll dieses Ereignis dem Server mitgeteilt werden. Der Server wiederum kann aber auch selbst Befehle an die Steuerungen senden (Reboot, neue Konfigurationsdaten, etc.).

Mein erster Gedanke war, eine Socket-Verbindung aufzubauen und diese dauerhaft geöffnet zu lassen, sodass beide Seiten jederzeit Daten senden können. Aber so wirklich sauber kommt mir das nicht vor, daher die Frage: Gibt es da eine bessere Lösung?


----------



## Tobse (6. Dez 2013)

Die Steuerungen können sich ja immer neu mit dem Server verbinden. Damit der Server auch neue Daten auf die Geräte übertragen kann, können die ja jede Minute kurz beim Server nachhaken, obs denn was neues gibt.

Ich sehe aber kein Problem damit, die Verbindung offen zu lassen - es geht eben dann dauerhaft traffic hin und her (Keep-Alive packets)


----------



## renwal (6. Dez 2013)

Hm, da halte ich offen lassen wirklich für die bessere Lösung. Ich meine, für jede Statusänderung (und das sind mehrere pro MINUTE) jedes mal neu zu verbinden, neu zu authentifizieren, etc ist wahrscheinlich weniger ressourcenschonend als einfach offen lassen. Und eine Minute Reaktionszeit ist definitiv zu lang, das muss sofort gehen. Mehr als 1-2 Sekunden dürfen da nicht dazwischen liegen, weil das teilweise echtzeitkritisch ist.


----------



## Tobse (6. Dez 2013)

renwal hat gesagt.:


> Mehr als 1-2 Sekunden dürfen da nicht dazwischen liegen, weil das teilweise echtzeitkritisch ist.



Dann ist die Sache doch eindeutig. Offen lassen und entweder Keep-Alives schicken oder bei einem 
	
	
	
	





```
IOException: Socket closed
```
/[c]IOException: Connection reset[/c] sofort reconnect.


----------

