From 756543eb9b685451d24c07378852715e369ca305 Mon Sep 17 00:00:00 2001 From: mmmray <142015632+mmmray@users.noreply.github.com> Date: Mon, 16 Sep 2024 18:31:50 +0200 Subject: [PATCH] SplitHTTP: Document xmux (#578) --- docs/en/config/transports/splithttp.md | 39 +++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/docs/en/config/transports/splithttp.md b/docs/en/config/transports/splithttp.md index bd467200a..d1d24a652 100644 --- a/docs/en/config/transports/splithttp.md +++ b/docs/en/config/transports/splithttp.md @@ -30,7 +30,13 @@ The `SplitHttpObject` corresponds to the `splithttpSettings` section under trans "scMaxConcurrentPosts": 100, "scMinPostsIntervalMs": 30, "noSSEHeader": false, - "xPaddingBytes": "100-1000" + "xPaddingBytes": "100-1000", + "xmux": { + "maxConnections": 0, + "maxConcurrency": 0, + "cMaxReuseTimes": 0, + "cMaxLifetimeMs": 0 + } } ``` @@ -103,6 +109,37 @@ A value of `-1` disables padding entirely. You can lower this to save bandwidth or increase it to improve censorship resistance. Too much padding may cause the CDN to reject traffic. +> `xmux` + +*Added in 24.9.16* + +Control the way that SplitHTTP distributes *sub-connections* (H2 stream or QUIC +stream) on "physical" TCP/QUIC *connections*. The default behavior is to put +all sub-connections of an outbound onto a single physical connection, which is +basically equal to using `mux.cool` with `concurrency=999999999`. + +It is recommended to tweak this transport-specific `xmux` instead of the global +`mux` key (mux.cool) for better performance, especially on QUIC/H3 connections. +That said, either one may be useful to work around certain connectivity issues +(and bugs in xray or other software). + +* `maxConnections`: Default 0 = infinite. The number of physical connections to + open. Every sub-connection will open a new connection until this value is + reached, only then connections will be reused. Mutually exclusive with + `maxConcurrency`. + +* `maxConcurrency`: Default 0 = infinite. The maximum number of sub-connections + to put onto a physical connection. New physical connections will be opened to + stay under this limit overall. Mutually exclusive with `maxConnections`. + Equivalent to mux.cool's `concurrency`. + +* `cMaxReuseTimes`: Default 0 = infinite. Stop re-using a physical connection + after it has been used for this many sub-connections. + +* `cMaxLifetimeMs`: Default 0 = infinite. Stop re-using a physical connection + after it has been open for this many milliseconds. + + ## HTTP versions *Added in 1.8.21: HTTP/3 support*