From 0acc7455f897bf41882a22d5071217b1b6e60edf Mon Sep 17 00:00:00 2001 From: eidheim Date: Mon, 23 Feb 2015 09:46:29 +0100 Subject: [PATCH] Faster default_resource for files smaller than buffer_size. --- http_examples.cpp | 18 +++++++++++------- https_examples.cpp | 18 +++++++++++------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/http_examples.cpp b/http_examples.cpp index f00faeb..c3733f0 100644 --- a/http_examples.cpp +++ b/http_examples.cpp @@ -109,15 +109,19 @@ int main() { response << "HTTP/1.1 200 OK\r\nContent-Length: " << length << "\r\n\r\n"; - //read and send 128 KB at a time + //read and send 128 KB at a time if file-size>buffer_size size_t buffer_size=131072; - vector buffer(buffer_size); - stringstream ss; - size_t read_length; - while((read_length=ifs.read(&buffer[0], buffer_size).gcount())>0) { - ss.write(&buffer[0], read_length); - response << ss.rdbuf() << HttpServer::flush; + if(length>buffer_size) { + vector buffer(buffer_size); + stringstream ss; + size_t read_length; + while((read_length=ifs.read(&buffer[0], buffer_size).gcount())>0) { + ss.write(&buffer[0], read_length); + response << ss.rdbuf() << HttpServer::flush; + } } + else + response << ifs.rdbuf(); ifs.close(); } diff --git a/https_examples.cpp b/https_examples.cpp index f2ac0c6..1d97215 100644 --- a/https_examples.cpp +++ b/https_examples.cpp @@ -109,15 +109,19 @@ int main() { response << "HTTP/1.1 200 OK\r\nContent-Length: " << length << "\r\n\r\n"; - //read and send 128 KB at a time + //read and send 128 KB at a time if file-size>buffer_size size_t buffer_size=131072; - vector buffer(buffer_size); - stringstream ss; - size_t read_length; - while((read_length=ifs.read(&buffer[0], buffer_size).gcount())>0) { - ss.write(&buffer[0], read_length); - response << ss.rdbuf() << HttpsServer::flush; + if(length>buffer_size) { + vector buffer(buffer_size); + stringstream ss; + size_t read_length; + while((read_length=ifs.read(&buffer[0], buffer_size).gcount())>0) { + ss.write(&buffer[0], read_length); + response << ss.rdbuf() << HttpServer::flush; + } } + else + response << ifs.rdbuf(); ifs.close(); }