50 releases (6 stable)
1.1.0-rc.1 | Jul 25, 2024 |
---|---|
1.0.5 | Oct 14, 2024 |
1.0.2 | Jun 3, 2024 |
1.0.0-rc.1 | Mar 19, 2024 |
0.2.0 | Apr 20, 2017 |
#1219 in Network programming
346 downloads per month
Used in 2 crates
1.5MB
33K
SLoC
sozu_lib, a proxy development library
sozu_lib
provides tools to write a proxy that can be reconfigured
without any downtime. See examples/http.rs
for a small example
of starting a HTTP proxy with one cluster.
A proxy starts as an event loop with which you communicate through
a Channel
. You can add or remove clusters by sending messages
through that channel. Each message has an identifier that the event
loop will use in its answer.
The proxy implementations handle differently the frontend and backend configurations. A single cluster could have multiple backend servers, but it can also answer to different hostnames and various TLS certificates. All those settings can be changed independently from the currently active connections. As an example, a backend server could be removed from the configuration while a client is still proxied through to that server. It should be possible later to force that connection to close if too many of those are lingering.
Exploring the source
parser/
: only the HTTP 1.1 parser for nowlib/src/buffer_queue.rs
: data buffering implementationlib/src/protocol/
: the HTTP, HTTP2, TLS handshake and piping proxieslib/src/{http|https|tcp}.rs
: proxies for HTTP, HTTPS and TCPlib/src/server.rs
: the main event loop shared by all proxieslib/src/socket.rs
: abstraction over normal sockets
Build with or without SIMD
SIMD stands for Single Instruction Multiple Data, and is used within the Kawa dependency to accelerate parsing.
Kawa implements SIMD with the SSE instruction set, which is specific to intel. If you wish to use Sōzu on another architecture (MacOS for instance), you can disable this feature by doing:
cargo build --no-default-features
Dependencies
~20–31MB
~587K SLoC