KDB + позволяет одному процессу связываться с другим процессом посредством межпроцессного взаимодействия. Процессы KDB + могут подключаться к любому другому KDB + на том же компьютере, в той же сети или даже удаленно. Нам просто нужно указать порт, и тогда клиенты смогут общаться с этим портом. Любой процесс q может взаимодействовать с любым другим процессом q, если он доступен в сети и ожидает подключения.
-
серверный процесс прослушивает соединения и обрабатывает любые запросы
-
клиентский процесс инициирует соединение и отправляет команды для выполнения
серверный процесс прослушивает соединения и обрабатывает любые запросы
клиентский процесс инициирует соединение и отправляет команды для выполнения
Клиент и сервер могут находиться на одной машине или на разных машинах. Процесс может быть как клиентом, так и сервером.
Общение может быть,
-
Синхронный (ожидание результата, который будет возвращен)
-
Асинхронный (без ожидания и без результата)
Синхронный (ожидание результата, который будет возвращен)
Асинхронный (без ожидания и без результата)
Инициализировать сервер
Сервер q инициализируется путем указания порта для прослушивания,
q –p 5001 / command line \p 5001 / session command
Ручка связи
Дескриптор связи — это символ, который начинается с «:» и имеет вид —
`:[server]:port-number
пример
`::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
Чтобы начать соединение, мы используем функцию «hopen», которая возвращает целочисленный дескриптор соединения. Этот дескриптор используется для всех последующих клиентских запросов. Например —
q)h:hopen `::5001 q)h"til 5" 0 1 2 3 4 q)hclose h
Синхронные и асинхронные сообщения
Как только у нас есть дескриптор, мы можем отправить сообщение синхронно или асинхронно.
Синхронное сообщение — после отправки сообщения оно ожидает и возвращает результат. Его формат выглядит следующим образом —
handle “message”
Асинхронное сообщение — после отправки сообщения немедленно приступите к обработке следующего оператора без необходимости ждать и возвращать результат. Его формат выглядит следующим образом —
neg[handle] “message”
Сообщения, которые требуют ответа, например, вызовы функций или операторы выбора, обычно используют синхронную форму; в то время как сообщения, которые не должны возвращать вывод, например, вставка обновлений в таблицу, будут асинхронными.