Linguagem Q - Comunicação entre processos

KDB + permite que um processo se comunique com outro processo por meio da comunicação entre processos. Os processos Kdb + podem se conectar a qualquer outro kdb + no mesmo computador, na mesma rede ou mesmo remotamente. Precisamos apenas especificar a porta e então os clientes podem se comunicar com ela. Qualquerq processo pode se comunicar com qualquer outro q processo, desde que esteja acessível na rede e esteja ouvindo conexões.

  • um processo do servidor escuta as conexões e processa todas as solicitações

  • um processo cliente inicia a conexão e envia comandos para serem executados

O cliente e o servidor podem estar na mesma máquina ou em máquinas diferentes. Um processo pode ser um cliente e um servidor.

Uma comunicação pode ser,

  • Synchronous (aguarde o resultado ser retornado)

  • Asynchronous (sem espera e nenhum resultado retornado)

Inicializar servidor

UMA q servidor é inicializado especificando a porta para escutar,

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

Identificador de Comunicação

Um identificador de comunicação é um símbolo que começa com “:” e tem a forma -

`:[server]:port-number

Exemplo

`::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 a conexão, usamos a função “hopen” que retorna um identificador de conexão inteiro. Este identificador é usado para todas as solicitações subsequentes do cliente. Por exemplo -

q)h:hopen `::5001

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

q)hclose h

Mensagens síncronas e assíncronas

Assim que tivermos um identificador, podemos enviar uma mensagem de forma síncrona ou assíncrona.

Synchronous Message- Depois que uma mensagem é enviada, ela aguarda e retorna o resultado. Seu formato é o seguinte -

handle “message”

Asynchronous Message- Depois de enviar uma mensagem, comece a processar a próxima instrução imediatamente, sem ter que esperar e retornar um resultado. Seu formato é o seguinte -

neg[handle] “message”

As mensagens que requerem uma resposta, por exemplo, chamadas de função ou instruções de seleção, normalmente usarão a forma síncrona; enquanto as mensagens que não precisam retornar uma saída, por exemplo, inserir atualizações em uma tabela, serão assíncronas.