2021-11-29 14:50:23 +00:00
|
|
|
#!/bin/bash
|
|
|
|
#
|
|
|
|
# proxy.py
|
|
|
|
# ~~~~~~~~
|
|
|
|
# ⚡⚡⚡ Fast, Lightweight, Programmable, TLS interception capable
|
|
|
|
# proxy server for Application debugging, testing and development.
|
|
|
|
#
|
|
|
|
# :copyright: (c) 2013-present by Abhinav Singh and contributors.
|
|
|
|
# :license: BSD, see LICENSE for more details.
|
|
|
|
#
|
|
|
|
usage() {
|
|
|
|
echo "Usage: ./benchmark/compare.sh"
|
|
|
|
echo "You must run this script from proxy.py repo root."
|
|
|
|
}
|
|
|
|
|
|
|
|
DIRNAME=$(dirname "$0")
|
|
|
|
if [ "$DIRNAME" != "./benchmark" ]; then
|
|
|
|
usage
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
BASENAME=$(basename "$0")
|
|
|
|
if [ "$BASENAME" != "compare.sh" ]; then
|
|
|
|
usage
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
PWD=$(pwd)
|
|
|
|
if [ $(basename $PWD) != "proxy.py" ]; then
|
|
|
|
usage
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2021-11-30 22:48:49 +00:00
|
|
|
TIMEOUT=1sec
|
2021-11-29 14:50:23 +00:00
|
|
|
CONCURRENCY=100
|
|
|
|
DURATION=1m
|
|
|
|
TOTAL_REQUESTS=100000
|
|
|
|
OPEN_FILE_LIMIT=65536
|
|
|
|
BACKLOG=OPEN_FILE_LIMIT
|
|
|
|
|
|
|
|
SERVER_HOST=127.0.0.1
|
|
|
|
|
2021-11-29 18:40:04 +00:00
|
|
|
AIOHTTP_PORT=8080
|
2021-11-29 14:50:23 +00:00
|
|
|
TORNADO_PORT=8888
|
2021-11-30 22:48:49 +00:00
|
|
|
STARLETTE_PORT=8890
|
2021-11-29 14:50:23 +00:00
|
|
|
PROXYPY_PORT=8899
|
2021-11-29 18:40:04 +00:00
|
|
|
BLACKSHEEP_PORT=9000
|
2021-11-29 14:50:23 +00:00
|
|
|
|
|
|
|
ulimit -n $OPEN_FILE_LIMIT
|
|
|
|
|
2021-11-30 22:48:49 +00:00
|
|
|
echo "CONCURRENCY: $CONCURRENCY workers, DURATION: $DURATION, TIMEOUT: $TIMEOUT"
|
2021-11-29 14:50:23 +00:00
|
|
|
|
2021-11-29 18:40:04 +00:00
|
|
|
run_benchmark() {
|
2021-11-30 22:48:49 +00:00
|
|
|
oha \
|
|
|
|
--no-tui \
|
|
|
|
--latency-correction \
|
|
|
|
-z $DURATION \
|
|
|
|
-c $CONCURRENCY \
|
|
|
|
-t $TIMEOUT \
|
|
|
|
http://127.0.0.1:$1/http-route-example
|
2021-11-29 18:40:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
benchmark_lib() {
|
2021-12-19 16:00:43 +00:00
|
|
|
python ./benchmark/_$1.py > /dev/null 2>&1 &
|
2021-11-29 18:40:04 +00:00
|
|
|
local SERVER_PID=$!
|
|
|
|
echo "Server (pid:$SERVER_PID) running"
|
|
|
|
sleep 1
|
|
|
|
run_benchmark $2
|
2021-11-29 14:50:23 +00:00
|
|
|
kill -15 $SERVER_PID
|
|
|
|
sleep 1
|
|
|
|
kill -0 $SERVER_PID > /dev/null 2>&1
|
|
|
|
local RUNNING=$?
|
|
|
|
if [ "$RUNNING" == "1" ]; then
|
|
|
|
echo "Server gracefully shutdown"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2021-11-29 18:40:04 +00:00
|
|
|
benchmark_asgi() {
|
|
|
|
uvicorn \
|
|
|
|
--port $1 \
|
|
|
|
--backlog 65536 \
|
|
|
|
$2 > /dev/null 2>&1 &
|
|
|
|
local SERVER_PID=$!
|
|
|
|
echo "Server (pid:$SERVER_PID) running"
|
|
|
|
sleep 1
|
|
|
|
run_benchmark $1
|
2021-11-29 14:50:23 +00:00
|
|
|
kill -15 $SERVER_PID
|
|
|
|
sleep 1
|
|
|
|
kill -0 $SERVER_PID > /dev/null 2>&1
|
|
|
|
local RUNNING=$?
|
|
|
|
if [ "$RUNNING" == "1" ]; then
|
|
|
|
echo "Server gracefully shutdown"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2021-11-30 22:48:49 +00:00
|
|
|
# echo "============================="
|
|
|
|
# echo "Benchmarking Proxy.Py"
|
2021-12-19 16:00:43 +00:00
|
|
|
# PYTHONPATH=. benchmark_lib proxy $PROXYPY_PORT
|
2021-11-30 22:48:49 +00:00
|
|
|
# echo "============================="
|
|
|
|
|
|
|
|
# echo "============================="
|
|
|
|
# echo "Benchmarking Blacksheep"
|
|
|
|
# benchmark_lib blacksheep $BLACKSHEEP_PORT
|
|
|
|
# echo "============================="
|
|
|
|
|
|
|
|
# echo "============================="
|
|
|
|
# echo "Benchmarking Starlette"
|
|
|
|
# benchmark_lib starlette $STARLETTE_PORT
|
|
|
|
# echo "============================="
|
|
|
|
|
|
|
|
# echo "============================="
|
|
|
|
# echo "Benchmarking AIOHTTP"
|
|
|
|
# benchmark_lib aiohttp $AIOHTTP_PORT
|
|
|
|
# echo "============================="
|
|
|
|
|
|
|
|
# echo "============================="
|
|
|
|
# echo "Benchmarking Tornado"
|
|
|
|
# benchmark_lib tornado $TORNADO_PORT
|
|
|
|
# echo "============================="
|