Q Language - Comunicazione tra processi

KDB + consente a un processo di comunicare con un altro processo tramite la comunicazione tra processi. I processi Kdb + possono connettersi a qualsiasi altro kdb + sullo stesso computer, sulla stessa rete o anche in remoto. Abbiamo solo bisogno di specificare la porta e quindi i client possono parlare con quella porta. Qualunqueq processo può comunicare con qualsiasi altro q finché è accessibile sulla rete e ascolta le connessioni.

  • un processo server ascolta le connessioni ed elabora le richieste

  • un processo client avvia la connessione e invia i comandi da eseguire

Il client e il server possono trovarsi sulla stessa macchina o su macchine diverse. Un processo può essere sia un client che un server.

Una comunicazione può essere,

  • Synchronous (attendere che venga restituito un risultato)

  • Asynchronous (nessuna attesa e nessun risultato restituito)

Inizializza server

UN q il server viene inizializzato specificando la porta su cui ascoltare,

q –p 5001 / command line
\p 5001   / session command

Maniglia di comunicazione

Una maniglia di comunicazione è un simbolo che inizia con ":" e ha la forma -

`:[server]:port-number

Esempio

`::5001              / server and client on same machine
`:jack:5001          / server on machine jack
`:192.168.0.156      / server on specific IP address
`:www.myfx.com:5001  / server at www.myfx.com

Per avviare la connessione, usiamo la funzione "hopen" che restituisce un handle di connessione intero. Questo handle viene utilizzato per tutte le richieste client successive. Ad esempio:

q)h:hopen `::5001

q)h"til 5"
0 1 2 3 4

q)hclose h

Messaggi sincroni e asincroni

Una volta che abbiamo un handle, possiamo inviare un messaggio in modo sincrono o asincrono.

Synchronous Message- Una volta che un messaggio viene inviato, attende e restituisce il risultato. Il suo formato è il seguente:

handle “message”

Asynchronous Message- Dopo aver inviato un messaggio, avvia immediatamente l'elaborazione dell'istruzione successiva senza dover attendere e restituire un risultato. Il suo formato è il seguente:

neg[handle] “message”

I messaggi che richiedono una risposta, ad esempio chiamate di funzione o istruzioni select, normalmente utilizzano la forma sincrona; mentre i messaggi che non devono restituire un output, ad esempio l'inserimento di aggiornamenti in una tabella, saranno asincroni.