Send data asynchronously over a connection (Socket, Context, Stream or Pipe).
send_aio(con, data, mode = c("serial", "raw"), timeout = NULL)
A ‘sendAio’ (object of class ‘sendAio’) (invisibly).
a Socket, Context, Stream or Pipe.
an object (a vector, if mode = ‘raw’).
[default 'serial'] character value or integer equivalent - either ‘serial’ (1L) to send serialised R objects, or ‘raw’ (2L) to send atomic vectors of any type as a raw byte vector. For Streams, ‘raw’ is the only option and this argument is ignored.
[default NULL] integer value in milliseconds or NULL, which applies a socket-specific default, usually the same as no timeout.
The default mode ‘serial’ sends serialised R objects to ensure
perfect reproducibility within R. When receiving, the corresponding mode
‘serial’ should be used. Custom serialization and unserialization
functions for reference objects may be enabled by the function
serial_config
.
Mode ‘raw’ sends atomic vectors of any type as a raw byte vector, and must be used when interfacing with external applications or raw system sockets, where R serialization is not in use. When receiving, the mode corresponding to the vector sent should be used.
Async send is always non-blocking and returns a ‘sendAio’ immediately.
For a ‘sendAio’, the send result is available at $result
.
An ‘unresolved’ logical NA is returned if the async operation is
yet to complete. The resolved value will be zero on success, or else an
integer error code.
To wait for and check the result of the send operation, use
call_aio
on the returned ‘sendAio’ object.
Alternatively, to stop the async operation, use stop_aio
.
pub <- socket("pub", dial = "inproc://nanonext")
res <- send_aio(pub, data.frame(a = 1, b = 2), timeout = 100)
res
res$result
res <- send_aio(pub, "example message", mode = "raw", timeout = 100)
call_aio(res)$result
close(pub)
Run the code above in your browser using DataLab