Учебники

Q Language — межпроцессное взаимодействие

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”

Сообщения, которые требуют ответа, например, вызовы функций или операторы выбора, обычно используют синхронную форму; в то время как сообщения, которые не должны возвращать вывод, например, вставка обновлений в таблицу, будут асинхронными.