Original post

Anton Antonov
Photo by Catherine Heath on Unsplash

Faster alternative of socat.

Multi-purpose relay from source to destination.

A relay is a tool for bidirectional data transfer between two independent data

Supported source-to-destination relays:

* TCP to Unix,
* Unix to TCP.
* Need something else? Feel free to open an issue to discuss it or shoot a Pull Request.

* Significantly faster than socat with medium and larger message payloads.
* Static binary, it just works. TM
* Actively health checks the source to prevent hanging/zombified source connections. (initial reason why socat didn’t work for us)

* socat performs slightly better with small message payloads.

At SumUp we use it as a backbone for infrastructure and deployment system(s) that:
* need to relay SSH protocol,
* proxy to TCP -> Unix or vice-versa where speed
* have reliability as an important concern.

As a now open-source project of SumUp, we hope that we find more use-cases together.

How the benchmarks work

Benchmarks are sending a message from the destination, relaying via gocat/socat to the source, which is an echo server that relays back to the destination via gocat/socat.

Reading the benchmarks:

X axis is the message payload size.

Y axis is throughput as per golang test’s -count argument, which benchmarks only the sending and receiving of a message sync or async.