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}     /可以覆盖自定义操作.

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

 
 .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}

输入为用户ID (符号)和密码(文本)