Q语言-进程间通信


KDB+ 允许一个进程通过进程间通信与另一进程进行通信。Kdb+ 进程可以连接到同一台计算机、同一网络甚至远程上的任何其他 kdb+。我们只需要指定端口,然后客户端就可以与该端口通信。任何q进程都可以与任何其他q进程通信,只要它可以在网络上访问并且正在侦听连接。

  • 服务器进程侦听连接并处理任何请求

  • 客户端进程发起连接并发送要执行的命令

客户端和服务器可以在同一台机器上,也可以在不同的机器上。一个进程既可以是客户端,也可以是服务器。

沟通可以是,

  • 同步(等待结果返回)

  • 异步(不等待,不返回结果)

初始化服务器

q服务器通过指定要侦听的端口来初始化,

q –p 5001 / command line
\p 5001   / session command

通讯手柄

通信句柄是一个以“:”开头的符号,其形式为 -

`:[server]:port-number

例子

`::5001              / server and client on same machine
`:jack:5001          / server on machine jack
`:192.168.0.156      / server on specific IP address
`:www.myfx.com:5001  / server at www.myfx.com

为了启动连接,我们使用函数“hopen”,它返回一个整数连接句柄。该句柄用于所有后续客户端请求。例如 -

q)h:hopen `::5001

q)h"til 5"
0 1 2 3 4

q)hclose h

同步和异步消息

一旦我们有了句柄,我们就可以同步或异步发送消息。

同步消息- 一旦发送消息,它就会等待并返回结果。其格式如下 -

handle “message”

异步消息- 发送消息后,立即开始处理下一条语句,而无需等待并返回结果。其格式如下 -

neg[handle] “message”

需要响应的消息,例如函数调用或 select 语句,通常会使用同步形式;而不需要返回输出的消息(例如向表中插入更新)将是异步的。