目录

Q - Message Handler (.Z Library)

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

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

  • Logging - 记录传入消息(有助于发生任何致命错误),

  • Security - 允许/禁止基于用户名/ IP地址访问数据库,某些函数调用等。 它有助于仅向授权订户提供访问权限。

  • Handle connections/disconnections其他进程的Handle connections/disconnections

预定义的消息处理程序

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

.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 (文本)。

↑回到顶部↑
WIKI教程 @2018