|
| constructor (Qore::ZMQ::ZContext ctx, string endpoint) |
| constructs a STREAM zsocket More...
|
|
| constructor (Qore::ZMQ::ZContext ctx) |
| constructs an unconnected STREAM zsocket More...
|
|
nothing | attach (*string endpoints, bool do_bind=False) |
| Attaches the socket to zero or more endpoints. More...
|
|
int | bind (string format,...) |
| Bind the ZSocket to a formatted endpoint. More...
|
|
nothing | connect (string format,...) |
| Connects the socket to a formatted endpoint. More...
|
|
| copy () |
| Throws an exception; copying ZSocket objects is not currently supported. More...
|
|
nothing | disconnect (string format,...) |
| Disconnects the socket from a formatted endpoint. More...
|
|
*string | endpoint () |
| Returns the last bound endpoint, if any or nothing if not. More...
|
|
*string | getIdentity () |
| retrieves the socket identity string More...
|
|
auto | getOption (int opt, int bufsize=100) |
| Retrieves the value of the given socket option. More...
|
|
nothing | monitor (int events, string format,...) |
| Creates a bound PAIR socket on the given endpoint which will send the specified events to a single client. More...
|
|
ZFrame | recvFrame () |
| Receives a frame from the socket. More...
|
|
ZMsg | recvMsg () |
| Receives a message from the socket. More...
|
|
nothing | send (Qore::ZMQ::ZMsg msg) |
| Sends the given message over the socket; the message is consumed by this call. More...
|
|
nothing | send (Qore::ZMQ::ZFrame frame, int flags=0) |
| Sends the given frame over the socket; the frame is consumed by this call unless Qore::ZMQ::ZFRAME_REUSE is used in the flags argument. More...
|
|
nothing | send (data val,...) |
| Sends one or more strings or binary data objects over the socket. More...
|
|
nothing | send () |
| Sends a zero-length message over the socket. More...
|
|
nothing | setIdentity (string id) |
| Sets the socket identity string. More...
|
|
| setOption (int opt, int value) |
| Sets the given socket option to the given value. More...
|
|
| setOption (int opt, bool value) |
| Sets the given socket option to the given value. More...
|
|
| setOption (int opt, data value) |
| Sets the given socket option to the given value. More...
|
|
nothing | setRecvHighWaterMark (int value) |
| Sets the receive high water mark. More...
|
|
nothing | setRecvTimeout (timeout timeout_ms) |
| Sets the receive timeout in milliseconds. More...
|
|
nothing | setSendTimeout (timeout timeout_ms) |
| Sets the send timeout in milliseconds. More...
|
|
nothing | setTimeout (timeout timeout_ms) |
| Sets the send and receive timeout in milliseconds. More...
|
|
string | type () |
| Returns the socket type as a string. More...
|
|
nothing | unbind (string format,...) |
| Unbinds the socket from a formatted endpoint. More...
|
|
nothing | waitRead (timeout timeout_ms) |
| Waits for data to read on the socket; if data does not arrive before the timeout expires, a ZSOCKET-TIMEOUT-ERROR exception is thrown. More...
|
|
nothing | waitWrite (timeout timeout_ms) |
| Waits for data to be written on the socket; if data is not sent before the timeout expires, a ZSOCKET-TIMEOUT-ERROR exception is thrown. More...
|
|
The ZSocketStream class implements a ZeroMQ STREAM
socket.
- Restrictions:
- Qore::PO_NO_NETWORK
- Overview
- A socket of type
STREAM
is used to send and receive TCP data from a non-ØMQ peer, when using the tcp://
transport. A STREAM
socket can act as client and/or server, sending and/or receiving TCP data asynchronously.
When receiving TCP data, a STREAM
socket shall prepend a message part containing the identity of the originating peer to the message before passing it to the application. Messages received are fair-queued from among all connected peers.
When sending TCP data, a STREAM
socket shall remove the first part of the message and use it to determine the identity of the peer the message shall be routed to, and unroutable messages shall cause an EHOSTUNREACH
or EAGAIN
error.
To open a connection to a server, use the ZSocket::connect() call, and then fetch the socket identity using the ZSocket::getIdentity().
To close a specific connection, send the identity frame followed by a zero-length message; see the example below.
When a connection is made, a zero-length message will be received by the application. Similarly, when the peer disconnects (or the connection is lost), a zero-length message will be received by the application.
You must send one identity frame followed by one data frame; the ZMQ_SNDMORE flag is required for identity frames but is ignored for data frames.
Summary of STREAM
characteristics
Property | Value |
Compatible peer sockets | none |
Direction | Bidirectional |
Send/receive pattern | Unrestricted |
Outgoing routing strategy | See text |
Incoming routing strategy | Fair-queued |
Action in mute state | EAGAIN |
- Example
ZContext zctx();
ZSocketStream sock(zctx);
sock.bind("tcp://*:8080");
while (True) {
ZFrame id = sock.recvFrame();
ZMsg msg = sock.recvMsg();
if (!msg.contentSize())
continue;
string http_msg = "Hello, World!";
string http_response = sprintf("HTTP/1.0 200 OK\r
Content-Type: text/plain\r
Content-Length: %d\r
\r
%s", http_msg.size(), http_msg);
sock.send(id, Qore::ZMQ::ZFRAME_MORE);
sock.send(http_response);
sock.send(id, Qore::ZMQ::ZFRAME_MORE);
sock.send();
}
- Note
- This class is not designed to be accessed from multiple threads; it was created without locking for fast and efficient use when used from a single thread. For methods that would be unsafe to use in another thread, any use of such methods in threads other than the thread where the constructor was called will cause a
ZSOCKET-THREAD-ERROR
to be thrown.