Hi!
Ich bin für ein Browser-Projekt derzeit dabei einen DataServer in node.js zu schreiben, der an ein Browserprogramm aktiv per Push Updates für Variablen sendet. Dieser Teil der Kommunikation (ich nutze hier WebSockets für die Verbindung und tausche JSON-Messages aus) funktioniert schon sehr schön, im Browser werden die Anzeigen sauber aktualisiert.
Nun bin ich dabei den DataServer um die Schnittstelle nach IPS zu erweitern - und da stellt sich mir jetzt die folgende Frage:
Wie aktualisiere ich das Prozessabbild des DataServers an effizientesten, ohne dabei den IPS-Server zu überlasten.
Um eine Idee für den Umfang des Prozessabbilds im DataServer zu bekommen habe ich mal überschlagsmäßig gerechnet:
Es verbinden sich 10 Clients mit dem DataServer. Jeder Client visualisiert parallel rund 40 Werte, wobei 15 davon auf allen Clients identisch sind (also insgesamt nur 1x benötigt werden). Damit wären wir bei 15 gemeinsammen und 25 separaten, also insgesamt bei 265 Variablen.
In einem ersten Design habe ich 2 PHP-Skripte erstellt, welche die Variablenversorgung übernommen haben:
SendUpdates.php wurde per Ereignis (Variablenänderung) für jede benötigte Variable getriggert und hat VariablenID und Wert in eine JSON-Message verpackt und an den DataServer gesendet (dieser hat für diesen Zweck eine HTTP-Komponente erhalten, die dann den Wert ins Prozessabbild übertragen und an alle abonierenden Clients gesendet hat).
ControlUpdates.php war per IPS-WebServer erreichbar und hat vom DataServer in JSON-Messages gepackte Befehle erhalten. Über die entsprechenden IPS-Funktionen hat dieses Skript dann neue Ereignisse für SendUpdates angelegt oder nicht mehr benötigte gelöscht. Im Testbetrieb hatte ich aber max. 2 Clients aktiv, so das die Anzahl der Events, die an SendUpdates.php gekoppelt waren, recht überschaubar geblieben ist. Was passiert aber wenn ein IPS-Skript mit 260 Variablen-Update-Events gekoppelt ist? Kann der IPS-Server das verwalten und wie sieht es dann mit der Performance aus?
Als alternative bin ich jetzt auf die SOAP-Schnittstelle gestossen, bei welcher ich ja theoretisch nur den Message-Server belauschen und die benötigten UpdateVariable-Events herrausfiltern brauche. Theoretisch leider weil ich bisher noch keinen funktionierenden node.js-Kode habe, um GetSessionMessages zu verwenden. Ich kann zwar schon die Session starten, erhalte auch eine SessionID, aber beim GetSessionMessages scheitere ich an einer Exception: „SOAP-ENV:Server: Ein Name beginnt mit einem ungültigen Zeichen.“. Derzeit habe ich keine Ahnung wo der Fehler zu suchen ist. Aber zurück zum Thema, wenn ich jetzt mit dem DataServer 1x pro Sekunde die Messages abholen würde, wie wäre da die Belastung des IPS-Servers?
Für Infos / Anregungen wäre ich dankbar.
PS: Wenn da draußen jemand ist, der schon Erfahrungen mit node.js hat, würde ich gerne mal mit demjenigen in Gedankenaustausch treten.