Język Q - program obsługi wiadomości

Kiedy q proces łączy się z innym qproces poprzez komunikację między procesami, jest przetwarzany przez programy obsługi komunikatów. Te programy obsługi komunikatów mają domyślne zachowanie. Na przykład w przypadku synchronicznej obsługi wiadomości program obsługi zwraca wartość zapytania. W tym przypadku procedura obsługi synchronicznej to.z.pg, które możemy zastąpić zgodnie z wymaganiami.

Procesy Kdb + mają kilka predefiniowanych programów obsługi komunikatów. Programy obsługi komunikatów są ważne przy konfigurowaniu bazy danych. Niektóre z zastosowań obejmują -

  • Logging - Loguj przychodzące wiadomości (pomocne w przypadku krytycznego błędu),

  • Security- Zezwalaj / nie zezwalaj na dostęp do bazy danych, niektórych wywołań funkcji itp. W oparciu o nazwę użytkownika / adres IP. Pomaga w zapewnieniu dostępu tylko upoważnionym abonentom.

  • Handle connections/disconnections z innych procesów.

Predefiniowane programy obsługi wiadomości

Poniżej omówiono niektóre z predefiniowanych programów obsługi komunikatów.

.z.pg

Jest to synchroniczna obsługa wiadomości (proces get). Ta funkcja jest wywoływana automatycznie po odebraniu wiadomości synchronizacji w instancji kdb +.

Parametr to wywołanie ciągu / funkcji do wykonania, tj. Przekazana wiadomość. Domyślnie jest zdefiniowany w następujący sposób -

.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

Jest to asynchroniczna obsługa komunikatów (zestaw procesów). Jest to równoważny program obsługi dla komunikatów asynchronicznych. Parametr to wywołanie ciągu / funkcji do wykonania. Domyślnie jest zdefiniowany jako,

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

Poniżej znajduje się dostosowana obsługa komunikatów dla komunikatów asynchronicznych, w przypadku których używaliśmy chronionego wykonania,

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

Tutaj errhandler to funkcja używana w przypadku nieoczekiwanego błędu.

.z.po []

Jest to otwarta procedura obsługi połączenia (proces otwierania). Jest wykonywany, gdy zdalny proces otwiera połączenie. Aby zobaczyć uchwyt podczas otwierania połączenia z procesem, możemy zdefiniować plik .z.po jako,

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

.z.pc []

Jest to program obsługi bliskiego połączenia (zamknięcie procesu). Jest wywoływana, gdy połączenie jest zamknięte. Możemy stworzyć własną procedurę zamykania, która może zresetować uchwyt połączenia globalnego do 0 i wydać polecenie, aby ustawić zegar na uruchomienie (wykonanie) co 3 sekundy (3000 milisekund).

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

Program obsługi licznika czasu (.z.ts) próbuje ponownie otworzyć połączenie. Jeśli się powiedzie, wyłącza stoper.

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

.z.pi []

PI oznacza wejście procesowe. Wzywa się do dowolnego rodzaju danych wejściowych. Może być używany do obsługi danych wejściowych konsoli lub klienta zdalnego. Używając .z.pi [], można sprawdzić poprawność danych wejściowych konsoli lub zastąpić domyślny ekran. Ponadto może być używany do wszelkiego rodzaju operacji logowania.

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

Jest to moduł obsługi połączenia walidacji (uwierzytelnianie użytkownika). Dodaje dodatkowe wywołanie zwrotne, gdy otwierane jest połączenie z sesją kdb +. Jest wywoływana po sprawdzeniach –u / -U i przed .z.po (port otwarty).

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

Wejścia są userid (symbol) i password (tekst).