Q Language - Message Handler

Quando un q processo si collega a un altro qprocesso tramite comunicazione tra processi, viene elaborato dai gestori di messaggi. Questi gestori di messaggi hanno un comportamento predefinito. Ad esempio, in caso di gestione sincrona dei messaggi, il gestore restituisce il valore della query. Il gestore sincrono in questo caso è.z.pg, che potremmo ignorare secondo il requisito.

I processi Kdb + hanno diversi gestori di messaggi predefiniti. I gestori di messaggi sono importanti per la configurazione del database. Alcuni degli usi includono:

  • Logging - Registra i messaggi in arrivo (utile in caso di errori fatali),

  • Security- Consentire / impedire l'accesso al database, a determinate chiamate di funzioni, ecc., In base al nome utente / indirizzo IP Aiuta a fornire l'accesso solo agli abbonati autorizzati.

  • Handle connections/disconnections da altri processi.

Gestori di messaggi predefiniti

Alcuni dei gestori di messaggi predefiniti sono discussi di seguito.

.z.pg

È un gestore di messaggi sincrono (processo get). Questa funzione viene chiamata automaticamente ogni volta che viene ricevuto un messaggio di sincronizzazione su un'istanza kdb +.

Il parametro è la chiamata di stringa / funzione da eseguire, ovvero il messaggio passato. Per impostazione predefinita, è definito come segue:

.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

È un gestore di messaggi asincrono (set di processi). È il gestore equivalente per i messaggi asincroni. Il parametro è la chiamata di stringa / funzione da eseguire. Per impostazione predefinita, è definito come,

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

Di seguito è riportato il gestore di messaggi personalizzato per i messaggi asincroni, in cui abbiamo utilizzato l'esecuzione protetta,

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

Qui errhandler è una funzione utilizzata in caso di errori imprevisti.

.z.po []

È un gestore di connessioni aperte (processo aperto). Viene eseguito quando un processo remoto apre una connessione. Per vedere l'handle quando viene aperta una connessione a un processo, possiamo definire .z.po come,

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

.z.pc []

È un gestore di connessioni chiuse (process-close). Viene chiamato quando una connessione viene chiusa. Possiamo creare il nostro gestore di chiusura che può reimpostare l'handle di connessione globale su 0 ed emettere un comando per impostare il timer in modo che si attivi (esegua) ogni 3 secondi (3000 millisecondi).

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

Il gestore del timer (.z.ts) tenta di riaprire la connessione. In caso di successo, disattiva il timer.

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

.z.pi []

PI sta per ingresso di processo. È richiesto qualsiasi tipo di input. Può essere utilizzato per gestire l'input della console o l'input del client remoto. Utilizzando .z.pi [], è possibile convalidare l'input della console o sostituire la visualizzazione predefinita. Inoltre, può essere utilizzato per qualsiasi tipo di operazione di registrazione.

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

È un gestore di connessione di convalida (autenticazione utente). Aggiunge una richiamata extra quando viene aperta una connessione a una sessione kdb +. Viene chiamato dopo i controlli –u / -U e prima di .z.po (porta aperta).

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

Gli input sono userid (simbolo) e password (testo).