mirror of
https://gitea.invidious.io/iv-org/litespeed-quic.git
synced 2024-08-15 00:53:43 +00:00
19f667fba5
- [FEATURE] http_client can now collect stats: time to connect, TTFB, time to download, requests per seconds, and bandwidth. See -t flag. - [BUGFIX] http_client: -B, -K, and -r can be used at the same time. - [BUGFIX] http_client: do not display cert chain before each request. Now this is only done once per connection, if the handshake is successful and -a option is given. - [BUGFIX] Do not wait to dispatch on_close() after reading. If a stream is scheduled to be closed after on_read() callback returns, close it immediately instead of waiting until the end of the tick. If client creates new request from on_close() event, they will be processed in the same tick instead of waiting for the next one. - [BUGFIX] HEADERS stream is critical: always treat it with highest priority.
156 lines
4.9 KiB
Text
156 lines
4.9 KiB
Text
# Copyright (c) 2017 - 2019 LiteSpeed Technologies Inc. See LICENSE.
|
|
LSQUIC Examples
|
|
===============
|
|
|
|
test/http_client.c demonstrates how to use HTTP features of QUIC.
|
|
|
|
Usage Examples
|
|
--------------
|
|
|
|
Fetch Google's home page:
|
|
|
|
./http_client -s www.google.com -p /
|
|
|
|
The default port number is 443, but it can be specified after colon
|
|
using the -s flag. The value of the `host' header as well as the SNI
|
|
value defaults to the host part of the -s option. -H option can be
|
|
used to override it. For example:
|
|
|
|
./http_client -H www.youtube.com -s www.google.com:443 -p / -M HEAD
|
|
|
|
The host part can be an IP address. Both IPv4 and IPv6 are supported.
|
|
See ./http_client -h for a (long) list of different flags.
|
|
|
|
POST a file to calculate its CRC32 checksum:
|
|
|
|
./http_client -H www.litespeedtech.com -s 443 \
|
|
-p /cgi-bin/crc32.cgi -P file-256M -M POST
|
|
|
|
HTTP/1.1 200 OK
|
|
content-type: text/plain
|
|
date: Fri, 09 Jun 2017 08:40:45 GMT
|
|
server: LiteSpeed
|
|
alt-svc: quic=":443"; v="35,37"
|
|
|
|
CRC32: 2A0E7DBB
|
|
|
|
This is a good way to check that the payload gets to the other side
|
|
correctly. The CGI script is:
|
|
|
|
#!/usr/bin/perl
|
|
use String::CRC32;
|
|
printf "Content-type: text/plain\r\n\r\nCRC32: %X\n", crc32(*STDIN)
|
|
|
|
On the command line, I do
|
|
|
|
alias crc32="perl -MString::CRC32 -e'printf qq(%X\n), crc32(<>)'"
|
|
|
|
To submit several requests concurrently, one can use -n and -r options:
|
|
|
|
./http_client -H www.litespeedtech.com -s 443 \
|
|
-p /cgi-bin/crc32.cgi -P file-256M -M POST -n 3 -r 10
|
|
|
|
This will open three parallel connections which will make ten POST
|
|
requests together.
|
|
|
|
To perform load testing, it is good to mix sending and receiving data:
|
|
|
|
for i in {1..100}; do
|
|
./http_client $COMMON_OPTS -p /cgi-bin/crc32.cgi -P file-256M \
|
|
-M POST >out-post.$i &
|
|
./http_client $COMMON_OPTS -p /docs/file-256M >out-get.$i &
|
|
sleep 1
|
|
done
|
|
|
|
If you don't want to create a hundred 256-megabyte out-get.* files, use -K
|
|
flag to discard output.
|
|
|
|
Control QUIC Settings via -o Flag
|
|
---------------------------------
|
|
|
|
Most of the settings in struct lsquic_engine_settings can be controlled
|
|
via -o flag. With exception of es_versions, which is a bit mask, other
|
|
es_* options can be mapped to corresponding -o value via s/^es_//:
|
|
|
|
es_cfcw => -o cwcf=12345
|
|
es_max_streams_in => -o max_streams_in=123
|
|
|
|
And so on.
|
|
|
|
The code to set options via -o flag lives in set_engine_option(). It is good
|
|
to update this function at the same time as member fields are added to struct
|
|
lsquic_engine_settings.
|
|
|
|
Control LSQUIC Behavior via Environment Variables
|
|
-------------------------------------------------
|
|
|
|
LSQUIC_PACER_INTERTICK
|
|
|
|
Number of microsecods to use as constant intertick time in lieu of the
|
|
pacer's dynamic intertick time approximation.
|
|
|
|
Only available in debug builds.
|
|
|
|
LSQUIC_CUBIC_SAMPLING_RATE
|
|
|
|
Number of microseconds between times CWND is logged at info level.
|
|
|
|
Only available in debug builds.
|
|
|
|
LSQUIC_RANDOM_SEND_FAILURE
|
|
|
|
Frequency with which sending of packets fails: one out of this many
|
|
times on average.
|
|
|
|
Only available when compiled with -DLSQUIC_RANDOM_SEND_FAILURE=1
|
|
|
|
Control Network-Related Stuff
|
|
-----------------------------
|
|
|
|
-D Set `do not fragment' flag on outgoing UDP packets.
|
|
|
|
-z BYTES Maximum size of outgoing UDP packets. The default is 1370
|
|
bytes for IPv4 socket and 1350 bytes for IPv6 socket.
|
|
|
|
-S opt=val Socket options. Supported options:
|
|
sndbuf=12345 # Sets SO_SNDBUF
|
|
rcvbuf=12345 # Sets SO_RCVBUF
|
|
|
|
More Compilation Options
|
|
------------------------
|
|
|
|
-DLSQUIC_CONN_STATS=1
|
|
|
|
Track some statistics about connections -- packets in, sent, delayed,
|
|
stream payload per packet size ratio, and some others -- and print them
|
|
at NOTICE level when connection is destroyed.
|
|
|
|
Cumulative connections statistics are printed by the engine when it is
|
|
destroyed if lsquic_engine_api.ea_stats_fh is set. The HTTP client
|
|
programs sets it when -t or -T command-line option is used.
|
|
|
|
-DLSQUIC_PACKINTS_SANITY_CHECK=1
|
|
|
|
Turn on sanity checking for packet interval code. The packet interval
|
|
code, shared by both send and receive history modules, contained a bug
|
|
which prompted me to add a checking function.
|
|
|
|
-DLSQUIC_SEND_STATS=0
|
|
|
|
Turn off statistics collection performed by the send controller: number
|
|
of packets sent, resent, and delayed.
|
|
|
|
-DLSQUIC_LOWEST_LOG_LEVEL=LSQ_LOG_WARN
|
|
|
|
If you want to go even faster: compile out some log levels entirely.
|
|
|
|
-DLSQUIC_EXTRA_CHECKS=1
|
|
|
|
Add relatively expensive run-time sanity checks
|
|
|
|
-DLSQUIC_RANDOM_SEND_FAILURE=1
|
|
|
|
Simulate failure to send packets to test send resumption logic. When
|
|
this flag is specified, sending of packets will randomly fail, about
|
|
one out of every 10 attempts. Set environment variable
|
|
LSQUIC_RANDOM_SEND_FAILURE to change this frequency.
|