📜  Q语言-消息处理程序

📅  最后修改于: 2020-11-03 06:53:36             🧑  作者: Mango


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

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

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

  • 安全性-根据用户名/ IP地址允许/禁止访问数据库,某些函数调用等。它仅有助于提供对授权订户的访问。

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

预定义的消息处理程序

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

.z.pg

它是一个同步消息处理程序(进程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.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}

输入为用户标识(符号)和密码(文本)。