mirror of
https://github.com/warmcat/libwebsockets.git
synced 2025-03-16 00:00:07 +01:00

This changes the approach of tx credit management to set the initial stream tx credit window to zero. This is the only way with RFC7540 to gain the ability to selectively precisely rx flow control incoming streams. At the time the headers are sent, a WINDOW_UPDATE is sent with the initial tx credit towards us for that specific stream. By default, this acts as before with a 256KB window added for both the stream and the nwsi, and additional window management sent as stuff is received. It's now also possible to set a member in the client info struct and a new option LCCSCF_H2_MANUAL_RXFLOW to precisely manage both the initial tx credit for a specific stream and the ongoing rate limit by meting out further tx credit manually. Add another minimal example http-client-h2-rxflow demonstrating how to force a connection's peer's initial budget to transmit to us and control it during the connection lifetime to restrict the amount of incoming data we have to buffer.
2.1 KiB
2.1 KiB
lws minimal http client-h2-rxflow
The application reads from a server with tightly controlled and rate-limited receive flow control using h2 tx credit.
build
$ cmake . && make
usage
Commandline option | Meaning |
---|---|
-d | Debug verbosity in decimal, eg, -d15 |
-l | Connect to https://localhost:7681 and accept selfsigned cert |
--server | set server name to connect to |
--path | URL path to access on server |
-k | Apply tls option LCCSCF_ALLOW_INSECURE |
-j | Apply tls option LCCSCF_ALLOW_SELFSIGNED |
-m | Apply tls option LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK |
-e | Apply tls option LCCSCF_ALLOW_EXPIRED |
-v | Connection validity use 3s / 10s instead of default 5m / 5m10s |
--nossl | disable ssl connection |
-f | Indicate we will manually manage tx credit and set a new connection-specific initial tx credit |
RX is constrained to 1024 bytes every 250ms
$ ./lws-minimal-http-client-h2-rxflow --server phys.org --path "/" -f 1024
[2019/12/26 13:32:59:6801] U: LWS minimal http client [-d<verbosity>] [-l] [--h1]
[2019/12/26 13:33:00:5087] N: system_notify_cb: manual peer tx credit 1024
[2019/12/26 13:33:01:7390] U: Connected to 72.251.236.55, http response: 200
[2019/12/26 13:33:01:7441] U: RECEIVE_CLIENT_HTTP_READ: read 1024
[2019/12/26 13:33:01:0855] U: RECEIVE_CLIENT_HTTP_READ: read 1024
[2019/12/26 13:33:02:3367] U: RECEIVE_CLIENT_HTTP_READ: read 1024
[2019/12/26 13:33:02:5858] U: RECEIVE_CLIENT_HTTP_READ: read 1024
[2019/12/26 13:33:02:8384] U: RECEIVE_CLIENT_HTTP_READ: read 1024
[2019/12/26 13:33:02:0886] U: RECEIVE_CLIENT_HTTP_READ: read 1024
...
[2019/12/26 13:33:46:1152] U: RECEIVE_CLIENT_HTTP_READ: read 1024
[2019/12/26 13:33:47:3650] U: RECEIVE_CLIENT_HTTP_READ: read 1024
[2019/12/26 13:33:47:6150] U: RECEIVE_CLIENT_HTTP_READ: read 1024
[2019/12/26 13:33:47:8666] U: RECEIVE_CLIENT_HTTP_READ: read 1024
[2019/12/26 13:33:47:1154] U: RECEIVE_CLIENT_HTTP_READ: read 1024
[2019/12/26 13:33:48:3656] U: RECEIVE_CLIENT_HTTP_READ: read 1024
[2019/12/26 13:33:48:6157] U: RECEIVE_CLIENT_HTTP_READ: read 380
[2019/12/26 13:33:48:6219] U: LWS_CALLBACK_COMPLETED_CLIENT_HTTP
[2019/12/26 13:33:48:7050] U: Completed: OK