Ngôn ngữ Q - Trình xử lý tin nhắn

Khi một q quy trình kết nối với một quy trình khác qxử lý thông qua giao tiếp giữa các quá trình, nó được xử lý bởi các trình xử lý tin nhắn. Các trình xử lý thư này có một hành vi mặc định. Ví dụ, trong trường hợp xử lý thông báo đồng bộ, trình xử lý trả về giá trị của truy vấn. Trình xử lý đồng bộ trong trường hợp này là.z.pg, mà chúng tôi có thể ghi đè theo yêu cầu.

Quy trình Kdb + có một số trình xử lý thông báo được xác định trước. Trình xử lý thông báo rất quan trọng để định cấu hình cơ sở dữ liệu. Một số cách sử dụng bao gồm:

  • Logging - Ghi nhật ký các tin nhắn đến (hữu ích trong trường hợp xảy ra bất kỳ lỗi nghiêm trọng nào),

  • Security- Cho phép / không cho phép truy cập cơ sở dữ liệu, các lệnh gọi hàm nhất định, v.v., dựa trên tên người dùng / địa chỉ ip. Nó chỉ giúp cung cấp quyền truy cập cho những người đăng ký được ủy quyền.

  • Handle connections/disconnections từ các quy trình khác.

Trình xử lý tin nhắn được xác định trước

Một số trình xử lý thư xác định trước được thảo luận bên dưới.

.z.pg

Nó là một trình xử lý thông báo đồng bộ (process get). Hàm này được gọi tự động bất cứ khi nào nhận được thông báo đồng bộ trên một cá thể kdb +.

Tham số là lệnh gọi chuỗi / hàm được thực hiện, tức là thông báo được truyền. Theo mặc định, nó được định nghĩa như sau:

.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

Nó là một trình xử lý thông báo không đồng bộ (bộ quy trình). Nó là trình xử lý tương đương cho các thông báo không đồng bộ. Tham số là lệnh gọi chuỗi / hàm được thực thi. Theo mặc định, nó được định nghĩa là,

.z.pg : {value x}        / Can be overriden for a customized action.

Sau đây là trình xử lý thông báo tùy chỉnh cho các thông báo không đồng bộ, nơi chúng tôi đã sử dụng thực thi được bảo vệ,

.z.pg: {@[value; x; errhandler x]}

Đây errhandler là một chức năng được sử dụng trong trường hợp có bất kỳ lỗi không mong muốn nào.

.z.po []

Nó là một trình xử lý mở kết nối (process-open). Nó được thực thi khi một quá trình từ xa mở kết nối. Để xem xử lý khi kết nối với một quy trình được mở, chúng ta có thể định nghĩa .z.po là,

.z.po : {Show “Connection opened by” , string h: .z.h}

.z.pc []

Nó là một trình xử lý kết nối chặt chẽ (đóng quá trình). Nó được gọi khi một kết nối bị đóng. Chúng ta có thể tạo trình xử lý đóng của riêng mình. Trình xử lý này có thể đặt lại trình xử lý kết nối chung về 0 và ra lệnh đặt bộ hẹn giờ kích hoạt (thực thi) sau mỗi 3 giây (3000 mili giây).

.z.pc : { h::0; value “\\t 3000”}

Bộ xử lý bộ hẹn giờ (.z.ts) cố gắng mở lại kết nối. Khi thành công, nó sẽ tắt bộ hẹn giờ.

.z.ts : { h:: hopen `::5001; if [h>0; value “\\t 0”] }

.z.pi []

PI là viết tắt của đầu vào quy trình. Nó được gọi cho bất kỳ loại đầu vào nào. Nó có thể được sử dụng để xử lý đầu vào bảng điều khiển hoặc đầu vào máy khách từ xa. Sử dụng .z.pi [], người ta có thể xác thực đầu vào bảng điều khiển hoặc thay thế màn hình mặc định. Ngoài ra, nó có thể được sử dụng cho bất kỳ loại hoạt động ghi nhật ký nào.

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

Nó là một trình xử lý kết nối xác thực (xác thực người dùng). Nó thêm một cuộc gọi lại bổ sung khi một kết nối đang được mở cho một phiên kdb +. Nó được gọi sau khi –u / -U kiểm tra và trước .z.po (cổng mở).

.z.pw : {[user_id;passwd] 1b}

Đầu vào là userid (biểu tượng) và password (bản văn).