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).