Advanced asynchronous C++ networking library, powered by Arc and used by Globed.
This library is available in Rust: dankmeme01/qunet
- Support for three underlying transports: TCP, QUIC and Reliable UDP
- UDP transport allows for choosing reliability per-message, perfect for games and other low latency cases
- Handles UDP fragmentation at protocol level
- Full support of IPv4 and IPv6
- Tiny data overhead: one handshake and then just 1 byte per data message (if no extra headers are present)
- ZSTD and LZ4 compression of messages, applied per-message
- Extensive DNS lookups, including SRV queries
- Smart logic for connection & reconnection, including happy eyeballs
- Buffers for efficient data manipulation:
ByteWriter,HeapByteWriter,ArrayByteWriter,CircularByteBuffer,ByteReader - Statistics tracking (bytes/messages sent, compression ratios, etc.)
- Highly confgiruable, including being able to disable some features at compile time, e.g. QUIC or advanced DNS resolver.
Currently, this library does not include server functionality. For making a Qunet server that you can connect to, use the Rust library
This section is incomplete as there's a ton to describe here :)
See tester/main.cpp for some example usage. Qunet is an Arc-based async library, and thus an Arc runtime is needed to create a connection. Other calls like sendData() are not required to be in the context of a runtime, only those that return a Future are.