Q Language - Controlador de mensajes

Cuando una q el proceso se conecta a otro qproceso a través de la comunicación entre procesos, es procesado por gestores de mensajes. Estos controladores de mensajes tienen un comportamiento predeterminado. Por ejemplo, en el caso del manejo de mensajes síncronos, el controlador devuelve el valor de la consulta. El manejador síncrono en este caso es.z.pg, que podríamos anular según el requisito.

Los procesos de Kdb + tienen varios manejadores de mensajes predefinidos. Los controladores de mensajes son importantes para configurar la base de datos. Algunos de los usos incluyen:

  • Logging - Registrar mensajes entrantes (útil en caso de cualquier error fatal),

  • Security- Permitir / no permitir el acceso a la base de datos, ciertas llamadas a funciones, etc., según el nombre de usuario / dirección IP. Ayuda a proporcionar acceso solo a suscriptores autorizados.

  • Handle connections/disconnections de otros procesos.

Controladores de mensajes predefinidos

Algunos de los controladores de mensajes predefinidos se describen a continuación.

.z.pg

Es un controlador de mensajes sincrónico (proceso de obtención). Esta función se llama automáticamente cada vez que se recibe un mensaje de sincronización en una instancia de kdb +.

El parámetro es la llamada de cadena / función que se ejecutará, es decir, el mensaje que se transmite. Por defecto, se define de la siguiente manera:

.z.pg: {value x}                / simply execute the message 
                                received but we can overwrite it to
give any customized result.
.z.pg : {handle::.z.w;value x}  / this will store the remote handle
.z.pg : {show .z.w;value x}     / this will show the remote handle

.z.ps

Es un controlador de mensajes asincrónico (conjunto de procesos). Es el controlador equivalente para mensajes asincrónicos. El parámetro es la llamada de cadena / función que se ejecutará. Por defecto, se define como,

.z.pg : {value x}        / Can be overriden for a customized action.

A continuación se muestra el controlador de mensajes personalizado para mensajes asincrónicos, donde hemos utilizado la ejecución protegida,

.z.pg: {@[value; x; errhandler x]}

aquí errhandler es una función utilizada en caso de cualquier error inesperado.

.z.po []

Es un controlador de conexión abierta (proceso abierto). Se ejecuta cuando un proceso remoto abre una conexión. Para ver el identificador cuando se abre una conexión a un proceso, podemos definir el .z.po como,

.z.po : {Show “Connection opened by” , string h: .z.h}

.z.pc []

Es un controlador de conexión cercana (proceso de cierre). Se llama cuando se cierra una conexión. Podemos crear nuestro propio controlador cercano que puede restablecer el controlador de conexión global a 0 y emitir un comando para configurar el temporizador para que se active (se ejecute) cada 3 segundos (3000 milisegundos).

.z.pc : { h::0; value “\\t 3000”}

El controlador del temporizador (.z.ts) intenta volver a abrir la conexión. Si tiene éxito, apaga el temporizador.

.z.ts : { h:: hopen `::5001; if [h>0; value “\\t 0”] }

.z.pi []

PI significa entrada de proceso. Se llama para cualquier tipo de entrada. Puede usarse para manejar la entrada de la consola o la entrada del cliente remoto. Usando .z.pi [], uno puede validar la entrada de la consola o reemplazar la pantalla predeterminada. Además, se puede utilizar para cualquier tipo de operaciones de registro.

q).z.pi
'.z.pi

q).z.pi:{">", .Q.s value x}

q)5+4
>9

q)30+42
>72

q)30*2
>60

q)\x .z.pi
>q)

q)5+4
9

.z.pw

Es un controlador de conexión de validación (autenticación de usuario). Agrega una devolución de llamada adicional cuando se abre una conexión a una sesión kdb +. Se llama después de las comprobaciones –u / -U y antes de .z.po (puerto abierto).

.z.pw : {[user_id;passwd] 1b}

Las entradas son userid (símbolo) y password (texto).