当 q 进程通过进程间通信连接到另一个 q 进程时,它由消息处理程序处理.这些消息处理程序具有默认行为.例如,在同步消息处理的情况下,处理程序返回查询的值.在这种情况下,同步处理程序是 .z.pg ,我们可以根据需要覆盖它.
Kdb +进程有几个预定义的消息处理程序.消息处理程序对于配置数据库很重要.一些用法包括 :
记录 : 记录收到的消息(在发生任何致命错误时有帮助),
安全性 : 允许/禁止基于用户名/IP地址访问数据库,某些函数调用等.它有助于仅向授权订户提供访问权.
处理连接/断开连接与其他进程.
下面将讨论一些预定义的消息处理程序.
它是一个同步消息处理程序(进程获取).每当在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.pg:{value x} /可以覆盖自定义操作.
以下是异步消息的自定义消息处理程序,我们使用了受保护的执行,
.z.pg:{@ [value; X; errhandler x]}
这里 errhandler 是一个在出现意外错误时使用的函数.
这是一个连接打开处理程序(进程打开).它在远程进程打开连接时执行.要在打开与进程的连接时查看句柄,我们可以将.z.po定义为,
.z.po : {Show "Connection opened by" , string h: .z.h}
它是一个关闭连接处理程序(进程关闭).连接关闭时调用它.我们可以创建自己的关闭处理程序,它可以将全局连接句柄重置为0,并发出命令将计时器设置为每3秒(3000毫秒)触发(执行).
.z.pc : { h::0; value "\\t 3000"}
计时器处理程序(.z.ts)尝试重新打开连接.成功时,它会关闭计时器.
.z.ts : { h:: hopen `::5001; if [h>0; value "\\t 0"] }
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
它是验证连接处理程序(用户身份验证).在向kdb +会话打开连接时,它会添加额外的回调.它在-u/-U检查之后和.z.po(端口打开)之前调用.
.z.pw : {[user_id;passwd] 1b}
输入为用户ID (符号)和密码(文本)