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.