Langue Q - Gestionnaire de messages

Lorsqu'un q processus se connecte à un autre qprocessus via une communication inter-processus, il est traité par des gestionnaires de messages. Ces gestionnaires de messages ont un comportement par défaut. Par exemple, en cas de gestion de message synchrone, le gestionnaire renvoie la valeur de la requête. Le gestionnaire synchrone dans ce cas est.z.pg, que nous pourrions remplacer selon l'exigence.

Les processus Kdb + ont plusieurs gestionnaires de messages prédéfinis. Les gestionnaires de messages sont importants pour la configuration de la base de données. Certains des usages incluent -

  • Logging - Enregistrer les messages entrants (utile en cas d'erreur fatale),

  • Security- Autoriser / interdire l'accès à la base de données, à certains appels de fonction, etc., en fonction du nom d'utilisateur / de l'adresse IP. Il aide à fournir un accès uniquement aux abonnés autorisés.

  • Handle connections/disconnections d'autres processus.

Gestionnaires de messages prédéfinis

Certains des gestionnaires de messages prédéfinis sont décrits ci-dessous.

.z.pg

C'est un gestionnaire de messages synchrone (processus get). Cette fonction est appelée automatiquement chaque fois qu'un message de synchronisation est reçu sur une instance kdb +.

Le paramètre est l'appel de chaîne / fonction à exécuter, c'est-à-dire le message passé. Par défaut, il est défini comme suit -

.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

Il s'agit d'un gestionnaire de messages asynchrone (ensemble de processus). C'est le gestionnaire équivalent pour les messages asynchrones. Le paramètre est l'appel de chaîne / fonction à exécuter. Par défaut, il est défini comme,

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

Voici le gestionnaire de messages personnalisé pour les messages asynchrones, où nous avons utilisé l'exécution protégée,

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

Ici errhandler est une fonction utilisée en cas d'erreur inattendue.

.z.po []

C'est un gestionnaire d'ouverture de connexion (processus ouvert). Il est exécuté lorsqu'un processus distant ouvre une connexion. Pour voir le handle lorsqu'une connexion à un processus est ouverte, nous pouvons définir le .z.po comme,

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

.z.pc []

Il s'agit d'un gestionnaire de connexion étroite (processus-close). Il est appelé lorsqu'une connexion est fermée. Nous pouvons créer notre propre gestionnaire de fermeture qui peut réinitialiser le handle de connexion global à 0 et émettre une commande pour que le minuteur se déclenche (s'exécute) toutes les 3 secondes (3000 millisecondes).

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

Le gestionnaire de minuterie (.z.ts) tente de rouvrir la connexion. En cas de succès, il éteint la minuterie.

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

.z.pi []

PI signifie entrée de processus. Il est appelé pour toute sorte d'entrée. Il peut être utilisé pour gérer l'entrée de la console ou l'entrée du client distant. En utilisant .z.pi [], on peut valider l'entrée de la console ou remplacer l'affichage par défaut. De plus, il peut être utilisé pour tout type d'opérations de journalisation.

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

Il s'agit d'un gestionnaire de connexion de validation (authentification de l'utilisateur). Il ajoute un rappel supplémentaire lorsqu'une connexion est ouverte à une session kdb +. Il est appelé après les vérifications –u / -U et avant le .z.po (port ouvert).

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

Les entrées sont userid (symbole) et password (texte).