📅  最后修改于: 2020-11-03 06:53:36             🧑  作者: Mango
当一个q进程通过进程间通信连接到另一个q进程时,它由消息处理程序处理。这些消息处理程序具有默认行为。例如,在同步消息处理的情况下,处理程序返回查询的值。在这种情况下,同步处理程序是.z.pg ,我们可以根据需要覆盖它。
Kdb +进程具有几个预定义的消息处理程序。消息处理程序对于配置数据库很重要。一些用法包括-
记录-记录传入的消息(在发生致命错误时很有帮助),
安全性-根据用户名/ IP地址允许/禁止访问数据库,某些函数调用等。它仅有助于提供对授权订户的访问。
处理与其他进程的连接/断开连接。
下面讨论了一些预定义的消息处理程序。
它是一个同步消息处理程序(进程get)。每当在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} / Can be overriden for a customized action.
以下是异步消息的自定义消息处理程序,其中我们使用了受保护的执行,
.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}
输入为用户标识(符号)和密码(文本)。