From 92f304fc96c81cbfc3d4880330c47aa533a83853 Mon Sep 17 00:00:00 2001 From: Alex Hultman Date: Wed, 24 Feb 2021 12:23:24 +0100 Subject: [PATCH] Make it possible to load_test with per-message-deflate --- benchmarks/Makefile | 2 +- benchmarks/load_test.c | 61 ++++++++++++++++++++++++++++++++++-------- 2 files changed, 51 insertions(+), 12 deletions(-) diff --git a/benchmarks/Makefile b/benchmarks/Makefile index ba503b6..fe33ea4 100644 --- a/benchmarks/Makefile +++ b/benchmarks/Makefile @@ -1,6 +1,6 @@ default: clang -flto -O3 -DLIBUS_USE_OPENSSL -I../uSockets/src ../uSockets/src/*.c ../uSockets/src/eventing/*.c ../uSockets/src/crypto/*.c broadcast_test.c load_test.c scale_test.c -c - clang++ -flto -O3 -DLIBUS_USE_OPENSSL -I../uSockets/src ../uSockets/src/crypto/*.cpp -c -std=c++20 + clang++ -flto -O3 -DLIBUS_USE_OPENSSL -I../uSockets/src ../uSockets/src/crypto/*.cpp -c -std=c++17 clang++ -flto -O3 -DLIBUS_USE_OPENSSL `ls *.o | grep -Ev "load_test|scale_test"` -lssl -lcrypto -o broadcast_test clang++ -flto -O3 -DLIBUS_USE_OPENSSL `ls *.o | grep -Ev "broadcast_test|scale_test"` -lssl -lcrypto -o load_test clang++ -flto -O3 -DLIBUS_USE_OPENSSL `ls *.o | grep -Ev "broadcast_test|load_test"` -lssl -lcrypto -o scale_test diff --git a/benchmarks/load_test.c b/benchmarks/load_test.c index 460e871..f9082cb 100644 --- a/benchmarks/load_test.c +++ b/benchmarks/load_test.c @@ -9,12 +9,37 @@ int SSL; // request eller upgradeRequest samt webSocketFrame -unsigned char web_socket_request[26] = {130, 128 | 20, 1, 2, 3, 4}; +/* Whatever type we selected (compressed or not) */ +unsigned char *web_socket_request; +int web_socket_request_size; -char request[] = "GET / HTTP/1.1\r\n" +char *upgrade_request; +int upgrade_request_length; + +/* Compressed message */ +unsigned char web_socket_request_deflate[13] = { + 130 | 64, 128 | 7, + 0, 0, 0, 0, + 0xf2, 0x48, 0xcd, 0xc9, 0xc9, 0x07, 0x00 +}; + +/* Not compressed */ +unsigned char web_socket_request_text[26] = {130, 128 | 20, 1, 2, 3, 4}; + + +char request_deflate[] = "GET / HTTP/1.1\r\n" "Upgrade: websocket\r\n" "Connection: Upgrade\r\n" "Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==\r\n" + "Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits\r\n" + "Host: server.example.com\r\n" + "Sec-WebSocket-Version: 13\r\n\r\n"; + +char request_text[] = "GET / HTTP/1.1\r\n" + "Upgrade: websocket\r\n" + "Connection: Upgrade\r\n" + "Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==\r\n" + //"Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits\r\n" "Host: server.example.com\r\n" "Sec-WebSocket-Version: 13\r\n\r\n"; char *host; @@ -60,16 +85,16 @@ struct us_socket_t *on_http_socket_writable(struct us_socket_t *s) { struct http_socket *http_socket = (struct http_socket *) us_socket_ext(SSL, s); /* Are we still not upgraded yet? */ - if (http_socket->upgrade_offset < sizeof(request) - 1) { - http_socket->upgrade_offset += us_socket_write(SSL, s, request + http_socket->upgrade_offset, sizeof(request) - 1 - http_socket->upgrade_offset, 0); + if (http_socket->upgrade_offset < upgrade_request_length) { + http_socket->upgrade_offset += us_socket_write(SSL, s, upgrade_request + http_socket->upgrade_offset, upgrade_request_length - http_socket->upgrade_offset, 0); /* Now we should be */ - if (http_socket->upgrade_offset == sizeof(request) - 1) { + if (http_socket->upgrade_offset == upgrade_request_length) { next_connection(s); } } else { /* Stream whatever is remaining of the request */ - http_socket->offset += us_socket_write(SSL, s, (char *) web_socket_request + http_socket->offset, sizeof(web_socket_request) - http_socket->offset, 0); + http_socket->offset += us_socket_write(SSL, s, (char *) web_socket_request + http_socket->offset, web_socket_request_size - http_socket->offset, 0); } return s; @@ -92,7 +117,7 @@ struct us_socket_t *on_http_socket_data(struct us_socket_t *s, char *data, int l //struct http_context *http_context = (struct http_context *) us_socket_context_ext(SSL, us_socket_context(SSL, s)); /* We treat all data events as a response */ - http_socket->offset = us_socket_write(SSL, s, (char *) web_socket_request, sizeof(web_socket_request), 0); + http_socket->offset = us_socket_write(SSL, s, (char *) web_socket_request, web_socket_request_size, 0); /* */ responses++; @@ -107,8 +132,8 @@ struct us_socket_t *on_http_socket_open(struct us_socket_t *s, int is_client, ch http_socket->offset = 0; /* Send an upgrade request */ - http_socket->upgrade_offset = us_socket_write(SSL, s, request, sizeof(request) - 1, 0); - if (http_socket->upgrade_offset == sizeof(request) - 1) { + http_socket->upgrade_offset = us_socket_write(SSL, s, upgrade_request, upgrade_request_length, 0); + if (http_socket->upgrade_offset == upgrade_request_length) { next_connection(s); } @@ -128,8 +153,8 @@ struct us_socket_t *on_http_socket_timeout(struct us_socket_t *s) { int main(int argc, char **argv) { /* Parse host and port */ - if (argc != 5) { - printf("Usage: connections host port ssl\n"); + if (argc != 6) { + printf("Usage: connections host port ssl deflate\n"); return 0; } @@ -138,6 +163,20 @@ int main(int argc, char **argv) { memcpy(host, argv[2], strlen(argv[2]) + 1); connections = atoi(argv[1]); SSL = atoi(argv[4]); + if (atoi(argv[5])) { + /* Set up deflate */ + web_socket_request = web_socket_request_deflate; + web_socket_request_size = sizeof(web_socket_request_deflate); + + upgrade_request = request_deflate; + upgrade_request_length = sizeof(request_deflate) - 1; + } else { + web_socket_request = web_socket_request_text; + web_socket_request_size = sizeof(web_socket_request_text); + + upgrade_request = request_text; + upgrade_request_length = sizeof(request_text) - 1; + } /* Create the event loop */ struct us_loop_t *loop = us_create_loop(0, on_wakeup, on_pre, on_post, 0);