Server Stage (TCP)
This stage allows you to establish a TCP server that some number of clients
can connect to. All data that is read from this server will be published
TcpPacketGroup messages – you will need to check the addresses on the
packets to understand what client they have come from.
While TCP connections are stream-oriented, and not packet-oriented, this stage
treats each return from
recv() as if it was a packet. These “packets” are grouped
Grouping is intended as a mechanism to batch messages on high-rate sensors, reducing performance overhead of publishing and logging individual TCP “packets”.
Basic configuration is in the
address- The address and port you will bind to.
maximum_connections- Number of simultaneous clients to allow.
group_size- The number of packets to bundle before publishing a group.
thread_priority- Priority to set the for the server thread.
thread_processor_affinity- Which processors the server thread can operate on.
TCP_NODELAYshould be on.
data_receive_timeout_ms- Disconnects client if data hasn’t been received in this interval.
egress_buffer_size_b- The size of the egress buffer (per-client).
This stage will start a background thread which services a socket. The thread will retry binding the socket until it is successful. If any error occurs, the socket will be torn down and rebuilt.
All packet groups are published under
packet_group in the stage’s namespace. They will
contain packets mixed from multiple clients; check the address on the packet to make
sense of them.
The stage listens for data to publish on the
egress_packets channel. Anything received
will be written to every connected client (or dropped otherwise). You should
set the configuration
egress_buffer_size_b to at least the size of the largest message
you expect to send; that controls the egress buffer and how much data the stage will queue
if the other side isn’t reading fast enough.
The stage periodically (at 1Hz) emits a
SocketStats structure containing
rate and size information. This is published under the
within the stage’s namespace.