NOTE: This documentation refers to an old version of FFglitch.
The ZeroMQ interface has changed considerably since then.
This page is almost entirely wrong now.

ZeroMQ

ZeroMQ enables ffgac, ffedit, and fflive to do many kinds of network communication and messaging.

A global constructor ZMQ() is built-in to the quickjs engine. This is a simple wrapper around ZeroMQ functionality.

This page is mostly based on the ZMQ API reference itself.

NOTE: The FFglitch ZeroMQ interface is still highly experimental. It may change wildly without warning in newer versions.


ZMQ Constructor

The new ZMQ() constructor is used to create a new ZMQ object.

This is a wrapper around zmq_ctx_new() and 0MQ context.

Syntax

new ZMQ()

Return value

The new ZMQ object.

Examples

const zmq = new ZMQ();

ZMQ.prototype.socket()

This is a wrapper around zmq_socket().

NOTE: The resulting socket object is kept internally in the ZMQ object because I still didn’t figure out a way to cleanup properly without this hack.

Syntax

socket(type)

Parameters

The type argument specifies the socket type, which determines the semantics of communication over the socket.

The types are available in the global ZMQ object, i.e.: ZMQ.ZMQ_REQ.

Return value

The new ZMQSocket object or an exception.

Examples

const zmq = new ZMQ();
const zreq = zmq.socket(ZMQ.ZMQ_REQ);

ZMQ.prototype.set()

This is a wrapper around zmq_ctx_set().

Syntax

set(option_name, option_value)

Parameters

The zmq_ctx_set() function shall set the option specified by the option_name argument to the value of the option_value argument.

The option names are available in the global ZMQ object, i.e.: ZMQ.ZMQ_BLOCKY.

Return value

0 on success, ortherwise an exception.

Examples

const zmq = new ZMQ();
zmq.set(ZMQ.ZMQ_BLOCKY, 0);

ZMQ.prototype.get()

This is a wrapper around zmq_ctx_get().

Syntax

get(option_name)

Parameters

The zmq_ctx_get() function shall return the option specified by the option_name argument.

The option names are available in the global ZMQ object, i.e.: ZMQ.ZMQ_BLOCKY.

Return value

0 on success, ortherwise an exception.

Examples

const zmq = new ZMQ();
const max_msg_size = zmq.get(ZMQ.ZMQ_MAX_MSGSZ);

ZMQ.prototype.shutdown()

This is a wrapper around zmq_ctx_shutdown().

Syntax

shutdown()

Return value

0 on success, ortherwise an exception.

Examples

const zmq = new ZMQ();
zmq.shutdown();

ZMQSocket.prototype.bind()

This is a wrapper around zmq_bind().

Syntax

bind(endpoint)

Parameters

The endpoint is a string consisting of a transport:// followed by an address. The transport specifies the underlying protocol to use. The address specifies the transport-specific address to bind to.

Return value

0 on success, ortherwise an exception.

Examples

(sorry, I haven’t tested this)


ZMQSocket.prototype.unbind()

This is a wrapper around zmq_unbind().

Syntax

unbind(endpoint)

Parameters

The endpoint is a string consisting of a transport:// followed by an address. The transport specifies the underlying protocol to use. The address specifies the transport-specific address to unbind from.

Return value

0 on success, ortherwise an exception.

Examples

(sorry, I haven’t tested this)


ZMQSocket.prototype.connect()

This is a wrapper around zmq_connect().

Syntax

connect(endpoint)

Parameters

The endpoint is a string consisting of a transport:// followed by an address. The transport specifies the underlying protocol to use. The address specifies the transport-specific address to connect to.

Return value

0 on success, ortherwise an exception.

Examples

const zmq = new ZMQ();
const zreq = zmq.socket(ZMQ.ZMQ_REQ);
zreq.connect("tcp://localhost:5556");

ZMQSocket.prototype.disconnect()

This is a wrapper around zmq_disconnect().

Syntax

disconnect(endpoint)

Parameters

The endpoint is a string consisting of a transport:// followed by an address. The transport specifies the underlying protocol to use. The address specifies the transport-specific address to disconnect from.

Return value

0 on success, ortherwise an exception.

Examples

const zmq = new ZMQ();
const zreq = zmq.socket(ZMQ.ZMQ_REQ);
zreq.connect("tcp://localhost:5556");
zreq.disconnect("tcp://localhost:5556");

ZMQSocket.prototype.send()

This is a wrapper around zmq_send().

Syntax

send(buffer, flags)

Parameters

The buffer parameter is an Uint8FFArray.

The flags parameter is optional. It is ZMQ.ZMQ_DONTWAIT by default if not specified.

NOTE: I still didn’t implement helpers to convert between string to Uint8FFArray, but it’s on my TODO list.

Return value

0 on success, ortherwise an exception.

Examples

const zmq = new ZMQ();
const zreq = zmq.socket(ZMQ.ZMQ_REQ);
zreq.connect("tcp://localhost:5556");
const buf = new Uint8FFArray(16);
zreq.send(buf, 0); // flags=0 is blocking
zreq.disconnect("tcp://localhost:5556");

ZMQSocket.prototype.recv()

This is a wrapper around zmq_recv().

Syntax

recv(flags)

Parameters

The buffer parameter is an Uint8FFArray.

The flags parameter is optional. It is ZMQ.ZMQ_DONTWAIT by default if not specified.

NOTE: I still didn’t implement helpers to convert between string to Uint8FFArray, but it’s on my TODO list.

Return value

0 on success, ortherwise an exception.

Examples

const zmq = new ZMQ();
const zreq = zmq.socket(ZMQ.ZMQ_REQ);
zreq.connect("tcp://localhost:5556");
zreq.send(new Uint8FFArray(0)); // empty message
const data = zreq.recv();
if ( data )
{
  console.log(`received ${data.length} bytes`);
  if ( data.length != 0 )
    console.log(JSON.stringify(data));
  zreq.send(new Uint8FFArray(0)); // ack
}
zreq.disconnect("tcp://localhost:5556");