LabVIEWForum.de
Client-Informationen (Zugriffe etc.) bei shared variables auslesen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenkommunikation (/Forum-Datenkommunikation)
+---- Thema: Client-Informationen (Zugriffe etc.) bei shared variables auslesen (/Thread-Client-Informationen-Zugriffe-etc-bei-shared-variables-auslesen)



Client-Informationen (Zugriffe etc.) bei shared variables auslesen - Novgorod - 21.10.2010 00:48

Hiho,

ich habe einen Datenlogger-Server auf einem PC laufen, der die Werte der DAQ-Karte per shared variables zur Verfügung stellt (also selbst updatet). Auf diese shared variables können nun beliebige Applikationen zugreifen (lokal und remote), z.B. Monitorprogramme, Messprogramme usw..
Das funktioniert alles soweit schnell und unkompliziert, allerdings kann ich ums verrecken eine ganz bestimmte Funktion nicht finden, nämlich sowas wie "client list" oder "letzter Lesezugriff". Ich willim Server-Programm sehen, ob (und am besten auch welche) Clients gerade verbunden sind und Daten abfragen - z.B. um eine Warnung auszugeben, falls man den Server stoppen will und noch Clients verbunden sind..
Natürlich könnte man eine "bidirektionale" Verbindung machen, also noch eine shared variable, in die die Clients permanent reinschreiben (z.B. ein String-Array mit unique-ID, URL und timestamp pro Client in jeder "Zeile"), aber ich würde die Kommunikation gerne "read-only" haben und auf ein Minimum reduzieren (auch die Anforderungen an die Client-Programme)..

Ich weiß, dass die shared variable engine (SVE) ein eigener Prozess ist und nur eine beschränkte Menge an Daten Labview zur Verfügung stellt. Mit dem DSC-Modul kommt man z.B. an "value-changed"-Events, aber nicht an Lese-Events und schon garnicht an die Client-Connections - oder ich habs einfach nicht gefundenSad
Da die SVE ja die Clients managed, muss sie zumindest auf einer niedrigeren Ebene diese Informationen haben - gibt es irgendeine Möglichkeit, aus Labview heraus da ranzukommen (über irgendeine Schnittstelle, z.B. ActiveX o.ä.?)..
Wenn man sich das ganze selber z.B. mit TCP/IP-queues o.ä. aufbaut, hat man ja schon prinzipiell Zugriff auf die Clients, aber lässt man die SVE ran, kriegt man zwar nen Haufen Daten aber leider nicht die interessantenWink


Client-Informationen (Zugriffe etc.) bei shared variables auslesen - nookie - 23.10.2010 09:31

Hallo,

ich weiß nicht, ob es so eine Funktion überhaupt gibt.

Du könntest allerdings als einfache Lösung eine zweite Netzwerkvariable erstellen, z.B. eine Bool, die du auf True setzt, wenn die Daten gültig sind, und auf False, kurz bevor du den Server beendest.
Auf diese Information hin, kannst du bei den Clients eine Meldung ausgeben, die Kommunikation oder gleich das ganze Programm beenden, oder was auch immer du willst!

lG nookie


Client-Informationen (Zugriffe etc.) bei shared variables auslesen - BNT - 23.10.2010 11:02

Hi
Shared Variablen stellen, wie schon die Protokollabkürzung PSP beschreibt, einen Publisher-Subscriber-Protokoll zur Verfügung.
Bei diesem Entwurfmuster muss es den Publisher nicht interessieren, wer den Service abonniert hat. Wie beim Radio: wenn der Sender aufhört zu senden, hört der Zuhörer halt nichts mehr. D.h. die Clientprogramme müssen sich um die Fehlermeldungen und Timeouts kümmern. Es hat ja auch Vorteile, wenn der Publisher autonom ist und nicht gezwungen ist, sich um die Verwaltung der Abonnenten kümmern muss. Der Publisher kann ja seinen Zustand in einer weitern SV veröffentlichen. Der SV-Prozess kann ja weiterlaufen. Die Verbindungen werden dann auch nicht unterbrochen. Mit Hilfe der Zustands-SV kann der Client entsprechend reagieren.

Gruß Holger


Client-Informationen (Zugriffe etc.) bei shared variables auslesen - Novgorod - 23.10.2010 20:45

' schrieb:Bei diesem Entwurfmuster muss es den Publisher nicht interessieren, wer den Service abonniert hat. Wie beim Radio: wenn der Sender aufhört zu senden, hört der Zuhörer halt nichts mehr.

Ja, das ist schon klar, aber auch beim Radio kann man Einschaltquoten "messen";)
Ich weiß, es ist kein gewöhnlicher Wunsch, aber vielleicht gibts ja eine Möglichkeit... Es geht mir nicht um die Client-Seite (wenn der Server aufhört zu senden und z.B. die shared variables löscht oder mit leeren Arrays ersetzt, kriegen die Clients das schon mit), es geht mir in erster Linie darum, ein unbedachtes Abschalten des Servers zu verhindern, solange noch Clients verbunden sind (oder messen/loggen).. Und da dachte ich, es ginge einfach, indem man entsprechende Parameter der SVE abfragt - dann bräuchte man keinen expliziten "Rückkanal", über den sich die Clients beim Server melden...