Q 语言 - 消息处理器



当一个q进程通过进程间通信连接到另一个q进程时,它由消息处理器处理。这些消息处理器具有默认行为。例如,在同步消息处理的情况下,处理器返回查询的值。在这种情况下,同步处理器是.z.pg,我们可以根据需要覆盖它。

Kdb+ 进程有几个预定义的消息处理器。消息处理器对于配置数据库非常重要。一些用法包括:

  • 日志记录 - 记录传入消息(在发生任何致命错误时很有帮助),

  • 安全性 - 根据用户名/IP 地址允许/拒绝访问数据库、某些函数调用等。它有助于仅向授权的订阅者提供访问权限。

  • 处理来自其他进程的连接/断开连接

预定义的消息处理器

下面讨论一些预定义的消息处理器。

.z.pg

它是一个同步消息处理器(进程获取)。每当在 kdb+ 实例上收到同步消息时,此函数都会自动调用。

参数是要执行的字符串/函数调用,即传递的消息。默认情况下,其定义如下:

.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

它是一个异步消息处理器(进程设置)。它是异步消息的等效处理器。参数是要执行的字符串/函数调用。默认情况下,其定义为:

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

以下是异步消息的自定义消息处理器,其中我们使用了受保护的执行:

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

这里errhandler是发生任何意外错误时使用的函数。

.z.po[]

它是一个连接打开处理器(进程打开)。当远程进程打开连接时执行。要查看打开与进程的连接时的句柄,我们可以将 .z.po 定义为:

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

.z.pc[]

它是一个关闭连接处理器(进程关闭)。当连接关闭时调用。我们可以创建自己的关闭处理器,它可以将全局连接句柄重置为 0 并发出命令以设置定时器以每 3 秒(3000 毫秒)触发(执行)。

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

定时器处理器 (.z.ts) 尝试重新打开连接。成功后,它会关闭定时器。

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

.z.pi[]

PI 代表进程输入。它用于任何类型的输入。它可以用于处理控制台输入或远程客户端输入。使用 .z.pi[],可以验证控制台输入或替换默认显示。此外,它可以用于任何类型的日志记录操作。

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

它是一个验证连接处理器(用户身份验证)。在打开到 kdb+ 会话的连接时,它会添加一个额外的回调。它在 –u/-U 检查之后和 .z.po(端口打开)之前调用。

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

输入是userid(符号)和password(文本)。

广告