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}        / 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(文字)。

廣告

© . All rights reserved.