Faster default_resource for files smaller than buffer_size.

This commit is contained in:
eidheim 2015-02-23 09:46:29 +01:00
commit 0acc7455f8
2 changed files with 22 additions and 14 deletions

View file

@ -109,8 +109,9 @@ int main() {
response << "HTTP/1.1 200 OK\r\nContent-Length: " << length << "\r\n\r\n"; 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; size_t buffer_size=131072;
if(length>buffer_size) {
vector<char> buffer(buffer_size); vector<char> buffer(buffer_size);
stringstream ss; stringstream ss;
size_t read_length; size_t read_length;
@ -118,6 +119,9 @@ int main() {
ss.write(&buffer[0], read_length); ss.write(&buffer[0], read_length);
response << ss.rdbuf() << HttpServer::flush; response << ss.rdbuf() << HttpServer::flush;
} }
}
else
response << ifs.rdbuf();
ifs.close(); ifs.close();
} }

View file

@ -109,15 +109,19 @@ int main() {
response << "HTTP/1.1 200 OK\r\nContent-Length: " << length << "\r\n\r\n"; 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; size_t buffer_size=131072;
if(length>buffer_size) {
vector<char> buffer(buffer_size); vector<char> buffer(buffer_size);
stringstream ss; stringstream ss;
size_t read_length; size_t read_length;
while((read_length=ifs.read(&buffer[0], buffer_size).gcount())>0) { while((read_length=ifs.read(&buffer[0], buffer_size).gcount())>0) {
ss.write(&buffer[0], read_length); ss.write(&buffer[0], read_length);
response << ss.rdbuf() << HttpsServer::flush; response << ss.rdbuf() << HttpServer::flush;
} }
}
else
response << ifs.rdbuf();
ifs.close(); ifs.close();
} }