Hallo
ich habe folgenden Aufbau:
Meine Application in der diverse Magie passiert und dem User über eine Benutzeroberfläche präsentiert wird. Die Genau Zusammenstellung ist für meine Frage nicht wirklich relevant.
2 seperate Threads die einen Input bzw. Output zu einer peripheren Hardware in form eines sockets bilden.
Die In und Outputs werden dazu benutzt um über ein Protokol zu kommunizieren. In den beiden Threads läuft ein infiniteloop der darauf wartet Nachrichten zu verarbeiten, um sie dann über AccessObjects der Application zur Verfügung zu stellen.
Soweit so gut, und es funktioniert alles tadelos, allerdings frage ich mich gerade wie ich IOExceptions bzw. Socketexceptions in diesen Threads handeln soll.
Ich sehe hier 3 Möglichkeiten.
1) Implizite Lösung mit den AccessObjects. Jedes mal wenn ich eine Nachricht schicke überprüfe ich ob der socket noch am Leben ist. Wenn nicht teile ich das dem User mit. Beim Output habe ich es so gelöst, da ich sofort mitbekomme wenn etwas nicht in Ordnung ist, da die Kommunikation von meiner Seite aus initiert wird. Beim Input habe ich allerdings das Problem dass ich grundsäztlich auf Nachrichten eines bestimmten Types warte, um die sich dann verschiedene Komponenten kümmern.
Es gibt allso kein allgemeines Timeout da es auch im Betriebsfall sein kann das nicht laufend Nachrichten kommen.
Ich könnte das Problem mit diesem Ansatz lösen, allerdings würde mich interessieren ob eine der folgenden Lösungen nicht vielleicht besser ist. Im wesentlichen würde ich mir damit den ExceptionHandling code an vielene Stellen ersparrren, da ich die Exceptions dann an einer stelle verarbeiten könnte.
2) ich starte einen zusätzlichen Monitorthread der alle x sekunden überprüft ob die beiden Threads noch arbeiten.
3) ich baue den beiden Kommunikationsthreads Listener ein, über die die Mainapplication über Zustandsänderungen informiert werden kann. Dazu noch eine Zusatzfrage. Ist es zulässig zwischen verschiedenen Threads mithilfe von Listenern zu kommunizieren? In den meisten nebenläufigen Anwendungen wäre diese Lösung ja sowieso inpraktikabel da die Kommunikation laufend erfolgen muss. Aber in meinem Fall will ich eigentlich nur dem User über den Status der Sockets unterrichten, weshalb ich mir denke das es zumindest eine Lösung wäre die man in betracht ziehen könnte.
Ich hoffe ich habe die Problematik verständlich beschrieben.
Danke für allfällige Antworten
mfg
Decline
ich habe folgenden Aufbau:
Meine Application in der diverse Magie passiert und dem User über eine Benutzeroberfläche präsentiert wird. Die Genau Zusammenstellung ist für meine Frage nicht wirklich relevant.
2 seperate Threads die einen Input bzw. Output zu einer peripheren Hardware in form eines sockets bilden.
Die In und Outputs werden dazu benutzt um über ein Protokol zu kommunizieren. In den beiden Threads läuft ein infiniteloop der darauf wartet Nachrichten zu verarbeiten, um sie dann über AccessObjects der Application zur Verfügung zu stellen.
Soweit so gut, und es funktioniert alles tadelos, allerdings frage ich mich gerade wie ich IOExceptions bzw. Socketexceptions in diesen Threads handeln soll.
Ich sehe hier 3 Möglichkeiten.
1) Implizite Lösung mit den AccessObjects. Jedes mal wenn ich eine Nachricht schicke überprüfe ich ob der socket noch am Leben ist. Wenn nicht teile ich das dem User mit. Beim Output habe ich es so gelöst, da ich sofort mitbekomme wenn etwas nicht in Ordnung ist, da die Kommunikation von meiner Seite aus initiert wird. Beim Input habe ich allerdings das Problem dass ich grundsäztlich auf Nachrichten eines bestimmten Types warte, um die sich dann verschiedene Komponenten kümmern.
Es gibt allso kein allgemeines Timeout da es auch im Betriebsfall sein kann das nicht laufend Nachrichten kommen.
Ich könnte das Problem mit diesem Ansatz lösen, allerdings würde mich interessieren ob eine der folgenden Lösungen nicht vielleicht besser ist. Im wesentlichen würde ich mir damit den ExceptionHandling code an vielene Stellen ersparrren, da ich die Exceptions dann an einer stelle verarbeiten könnte.
2) ich starte einen zusätzlichen Monitorthread der alle x sekunden überprüft ob die beiden Threads noch arbeiten.
3) ich baue den beiden Kommunikationsthreads Listener ein, über die die Mainapplication über Zustandsänderungen informiert werden kann. Dazu noch eine Zusatzfrage. Ist es zulässig zwischen verschiedenen Threads mithilfe von Listenern zu kommunizieren? In den meisten nebenläufigen Anwendungen wäre diese Lösung ja sowieso inpraktikabel da die Kommunikation laufend erfolgen muss. Aber in meinem Fall will ich eigentlich nur dem User über den Status der Sockets unterrichten, weshalb ich mir denke das es zumindest eine Lösung wäre die man in betracht ziehen könnte.
Ich hoffe ich habe die Problematik verständlich beschrieben.
Danke für allfällige Antworten
mfg
Decline