From Kx Wiki
Jump to: navigation, search

The wiki is moving to a new format and this page is no longer maintained. You can find the new page at

The wiki will remain in place until the migration is complete. If you prefer the wiki to the new format, please tell the Librarian why.


3. Q IPC

3.1 Overview

A production kdb+ system may have several q processes, possibly on several machines. These communicate via tcp/ip. Any q process can communicate with any other q process as long as it is accessible on the network and is listening for connections.

Client and server can be on the same machine or on different machines. A process can be both a client and a server.

A communication can be synchronous (wait for a result to be returned) or asynchronous (no wait and no result returned).

3.2 Initialize Server

A q server is initialized by specifying the port to listen on, with either a command line parameter or a session command:

..$ q -p 5001          / command line

q)\p 5001              / session command

3.3 Communication Handle

A communication handle is a symbol that starts with : and has the form:


where the server is optional, and port is a port number. The server need not be given if on the same machine. Examples:

`::5001                    / server on same machine as client
`:genie:5001               / server on machine genie
`:        / server on given IP address
`     / server at

The function hopen starts a connection, and returns an integer connection handle. This handle is used for all subsequent client requests. For example:

q)h:hopen `::5001
q)h "3?20"
1 12 9
q)hclose h

3.4 Synchronous/Asynchronous

Where the connection handle is used as defined (it will be a positive integer), the client request is synchronous. In this case, the client waits for the result from the server before continuing execution. The result from the server is the result of the client request.

Where the negative of the connection handle is used, the client request is asynchronous. In this case, the request is sent to the server, but the client does not wait or get a result from the server. This is done when a result is not required by the client.

For example:

q)h:hopen `::5001
q)(neg h) "a:3?20"          / send asynchronously, no result
q)(neg h) "a"               / again no result
q)h "a"                     / synchronous, with result
0 17 14

3.5 Message Formats

There are two message formats:

For example:

q)h "2 3 5 + 10 20 30"         / send q expression
12 23 35
q)h (+;2 3 5;10 20 30)         / send function and its arguments
12 23 35

If a function name is given, this is called on the server:

q)h ("mydef";2 3 5;10 20 30)   / call function mydef with these arguments

There are examples in the Realtime Database section, where a process receives a data feed and posts to subscribers by calling an update function in the subscriber.

3.6 Http Connections

A qserver can also be accessed via http. To try this, run a q server on your machine with port 5001. Then, load a web browser, and go to http://localhost:5001. You can now see the names defined in the base context.

Prev: 2. Q Language Next: 4. Kdb+ Tables

Table of Contents

Personal tools