Q Language - Comunicación entre procesos

KDB + permite que un proceso se comunique con otro proceso a través de la comunicación entre procesos. Los procesos de Kdb + pueden conectarse a cualquier otro kdb + en la misma computadora, la misma red o incluso de forma remota. Solo necesitamos especificar el puerto y luego los clientes pueden hablar con ese puerto. Ningunaq El proceso puede comunicarse con cualquier otro q proceso siempre que sea accesible en la red y esté escuchando conexiones.

  • un proceso de servidor escucha las conexiones y procesa cualquier solicitud

  • un proceso cliente inicia la conexión y envía comandos para ser ejecutados

El cliente y el servidor pueden estar en la misma máquina o en máquinas diferentes. Un proceso puede ser tanto un cliente como un servidor.

Una comunicación puede ser,

  • Synchronous (esperar a que se devuelva un resultado)

  • Asynchronous (no espere y no devuelva ningún resultado)

Inicializar servidor

UN q el servidor se inicializa especificando el puerto para escuchar,

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

Mango de comunicación

Un identificador de comunicación es un símbolo que comienza con ":" y tiene la forma -

`:[server]:port-number

Ejemplo

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

Para iniciar la conexión, usamos la función "hopen" que devuelve un identificador de conexión entero. Este identificador se utiliza para todas las solicitudes de clientes posteriores. Por ejemplo

q)h:hopen `::5001

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

q)hclose h

Mensajes sincrónicos y asincrónicos

Una vez que tenemos un identificador, podemos enviar un mensaje de forma sincrónica o asincrónica.

Synchronous Message- Una vez que se envía un mensaje, espera y devuelve el resultado. Su formato es el siguiente:

handle “message”

Asynchronous Message- Después de enviar un mensaje, comience a procesar la siguiente declaración inmediatamente sin tener que esperar y devolver un resultado. Su formato es el siguiente:

neg[handle] “message”

Los mensajes que requieren una respuesta, por ejemplo, llamadas a funciones o sentencias select, normalmente utilizarán la forma sincrónica; mientras que los mensajes que no necesitan devolver una salida, por ejemplo, la inserción de actualizaciones en una tabla, serán asincrónicos.