Kdbplus-q-language-message-handler
Q言語-メッセージハンドラー
*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 []
これは、接続を閉じるハンドラーです(process-close)。 接続が閉じられたときに呼び出されます。 グローバル接続ハンドルを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 (テキスト)です。