Język Q - komunikacja między procesami

KDB + umożliwia jednemu procesowi komunikację z innym procesem poprzez komunikację międzyprocesową. Procesy Kdb + mogą łączyć się z dowolnym innym kdb + na tym samym komputerze, w tej samej sieci, a nawet zdalnie. Musimy tylko określić port, a klienci będą mogli rozmawiać z tym portem. Każdyq proces może komunikować się z każdym innym q tak długo, jak jest dostępny w sieci i nasłuchuje połączeń.

  • proces serwera nasłuchuje połączeń i przetwarza wszelkie żądania

  • proces klienta inicjuje połączenie i wysyła polecenia do wykonania

Klient i serwer mogą znajdować się na tym samym komputerze lub na różnych komputerach. Proces może być zarówno klientem, jak i serwerem.

Komunikacja może być,

  • Synchronous (poczekaj na zwrot wyniku)

  • Asynchronous (bez czekania i brak wyników)

Zainicjuj serwer

ZA q serwer jest inicjowany poprzez określenie portu nasłuchiwania,

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

Uchwyt komunikacyjny

Uchwyt komunikacyjny to symbol zaczynający się od „:” i mający postać -

`:[server]:port-number

Przykład

`::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

Aby rozpocząć połączenie, używamy funkcji „hopen”, która zwraca uchwyt połączenia będący liczbą całkowitą. Ten uchwyt jest używany do wszystkich kolejnych żądań klientów. Na przykład -

q)h:hopen `::5001

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

q)hclose h

Wiadomości synchroniczne i asynchroniczne

Gdy już mamy uchwyt, możemy wysłać wiadomość synchronicznie lub asynchronicznie.

Synchronous Message- Po wysłaniu wiadomości czeka na i zwraca wynik. Jego format jest następujący -

handle “message”

Asynchronous Message- Po wysłaniu wiadomości natychmiast rozpocznij przetwarzanie następnej instrukcji bez konieczności czekania i zwracania wyniku. Jego format jest następujący -

neg[handle] “message”

Komunikaty wymagające odpowiedzi, na przykład wywołania funkcji lub instrukcje wyboru, będą normalnie używać formy synchronicznej; podczas gdy komunikaty, które nie muszą zwracać danych wyjściowych, na przykład wstawianie aktualizacji do tabeli, będą asynchroniczne.