Q Sprache - Nachrichtenhandler

Wenn ein q Prozess verbindet sich mit einem anderen qProzess über prozessübergreifende Kommunikation, wird von Nachrichtenhandlern verarbeitet. Diese Nachrichtenhandler haben ein Standardverhalten. Bei einer synchronen Nachrichtenbehandlung gibt der Handler beispielsweise den Wert der Abfrage zurück. Der synchrone Handler ist in diesem Fall.z.pg, die wir je nach Anforderung überschreiben könnten.

Kdb + -Prozesse verfügen über mehrere vordefinierte Nachrichtenhandler. Nachrichtenhandler sind wichtig für die Konfiguration der Datenbank. Einige der Verwendungen umfassen -

  • Logging - Protokollieren Sie eingehende Nachrichten (hilfreich bei schwerwiegenden Fehlern),

  • Security- Zulassen / Verbieten des Zugriffs auf die Datenbank, bestimmte Funktionsaufrufe usw. basierend auf Benutzername / IP-Adresse. Es hilft dabei, nur autorisierten Abonnenten Zugriff zu gewähren.

  • Handle connections/disconnections aus anderen Prozessen.

Vordefinierte Nachrichtenhandler

Einige der vordefinierten Nachrichtenhandler werden unten erläutert.

.z.pg

Es ist ein synchroner Nachrichtenhandler (Process Get). Diese Funktion wird automatisch aufgerufen, wenn eine Synchronisierungsnachricht auf einer kdb + -Instanz empfangen wird.

Parameter ist der auszuführende String- / Funktionsaufruf, dh die übergebene Nachricht. Standardmäßig ist es wie folgt definiert:

.z.pg: {value x}                / simply execute the message 
                                received but we can overwrite it to
give any customized result.
.z.pg : {handle::.z.w;value x}  / this will store the remote handle
.z.pg : {show .z.w;value x}     / this will show the remote handle

.z.ps

Es ist ein asynchroner Nachrichtenhandler (Prozesssatz). Dies ist der entsprechende Handler für asynchrone Nachrichten. Parameter ist der auszuführende String / Funktionsaufruf. Standardmäßig ist es definiert als:

.z.pg : {value x}        / Can be overriden for a customized action.

Im Folgenden finden Sie den benutzerdefinierten Nachrichtenhandler für asynchrone Nachrichten, bei dem wir die geschützte Ausführung verwendet haben.

.z.pg: {@[value; x; errhandler x]}

Hier errhandler ist eine Funktion, die im Falle eines unerwarteten Fehlers verwendet wird.

.z.po []

Es ist ein Handler für offene Verbindungen (Prozess offen). Es wird ausgeführt, wenn ein Remote-Prozess eine Verbindung herstellt. Um das Handle zu sehen, wenn eine Verbindung zu einem Prozess geöffnet wird, können Sie die .z.po wie folgt definieren:

.z.po : {Show “Connection opened by” , string h: .z.h}

.z.pc []

Es ist ein Handler für enge Verbindungen (Prozessabschluss). Es wird aufgerufen, wenn eine Verbindung geschlossen wird. Wir können unseren eigenen Close-Handler erstellen, der das globale Verbindungshandle auf 0 zurücksetzen und einen Befehl ausgeben kann, mit dem der Timer alle 3 Sekunden (3000 Millisekunden) ausgelöst (ausgeführt) wird.

.z.pc : { h::0; value “\\t 3000”}

Der Timer-Handler (.z.ts) versucht, die Verbindung erneut zu öffnen. Bei Erfolg wird der Timer ausgeschaltet.

.z.ts : { h:: hopen `::5001; if [h>0; value “\\t 0”] }

.z.pi []

PI steht für Process Input. Es wird für jede Art von Eingabe aufgerufen. Es kann zur Verarbeitung von Konsoleneingaben oder Remote-Client-Eingaben verwendet werden. Mit .z.pi [] kann die Konsoleneingabe überprüft oder die Standardanzeige ersetzt werden. Darüber hinaus kann es für jede Art von Protokollierungsvorgängen verwendet werden.

q).z.pi
'.z.pi

q).z.pi:{">", .Q.s value x}

q)5+4
>9

q)30+42
>72

q)30*2
>60

q)\x .z.pi
>q)

q)5+4
9

.z.pw

Es ist ein Validierungsverbindungshandler (Benutzerauthentifizierung). Es wird ein zusätzlicher Rückruf hinzugefügt, wenn eine Verbindung zu einer kdb + -Sitzung geöffnet wird. Es wird nach den –u / -U-Überprüfungen und vor der .z.po (Port offen) aufgerufen.

.z.pw : {[user_id;passwd] 1b}

Eingänge sind userid (Symbol) und password (Text).