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.