Slightly improved default_resource example
This commit is contained in:
parent
68f1e8413a
commit
57a0c83f64
2 changed files with 44 additions and 44 deletions
|
|
@ -22,9 +22,6 @@ using namespace boost::property_tree;
|
||||||
typedef SimpleWeb::Server<SimpleWeb::HTTP> HttpServer;
|
typedef SimpleWeb::Server<SimpleWeb::HTTP> HttpServer;
|
||||||
typedef SimpleWeb::Client<SimpleWeb::HTTP> HttpClient;
|
typedef SimpleWeb::Client<SimpleWeb::HTTP> HttpClient;
|
||||||
|
|
||||||
//Added for the default_resource example
|
|
||||||
void default_resource_send(const shared_ptr<HttpServer::Response> &response, const shared_ptr<ifstream> &ifs);
|
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
//HTTP-server at port 8080 using 1 thread
|
//HTTP-server at port 8080 using 1 thread
|
||||||
//Unless you do more heavy non-threaded processing in the resources,
|
//Unless you do more heavy non-threaded processing in the resources,
|
||||||
|
|
@ -126,7 +123,7 @@ int main() {
|
||||||
};
|
};
|
||||||
|
|
||||||
//Get example simulating heavy work in a separate thread
|
//Get example simulating heavy work in a separate thread
|
||||||
server->resource["^/work$"]["GET"] = [](shared_ptr<HttpServer::Response> response, shared_ptr<HttpServer::Request> /*request*/) {
|
server->resource["^/work$"]["GET"] = [](shared_ptr<HttpServer::Response> response, shared_ptr<HttpServer::Request> /*request*/) {
|
||||||
thread work_thread([response] {
|
thread work_thread([response] {
|
||||||
this_thread::sleep_for(chrono::seconds(5));
|
this_thread::sleep_for(chrono::seconds(5));
|
||||||
response->write("Work done");
|
response->write("Work done");
|
||||||
|
|
@ -183,7 +180,27 @@ int main() {
|
||||||
|
|
||||||
header.emplace("Content-Length", to_string(length));
|
header.emplace("Content-Length", to_string(length));
|
||||||
response->write(header);
|
response->write(header);
|
||||||
default_resource_send(response, ifs);
|
|
||||||
|
class FileServer {
|
||||||
|
public:
|
||||||
|
static void read_and_send(const shared_ptr<HttpServer::Response> &response, const shared_ptr<ifstream> &ifs) {
|
||||||
|
//read and send 128 KB at a time
|
||||||
|
static vector<char> buffer(131072); // Safe when server is running on one thread
|
||||||
|
streamsize read_length;
|
||||||
|
if((read_length = ifs->read(&buffer[0], buffer.size()).gcount()) > 0) {
|
||||||
|
response->write(&buffer[0], read_length);
|
||||||
|
if(read_length == static_cast<streamsize>(buffer.size())) {
|
||||||
|
response->send([response, ifs](const SimpleWeb::error_code &ec) {
|
||||||
|
if(!ec)
|
||||||
|
read_and_send(response, ifs);
|
||||||
|
else
|
||||||
|
cerr << "Connection interrupted" << endl;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
FileServer::read_and_send(response, ifs);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
throw invalid_argument("could not read file");
|
throw invalid_argument("could not read file");
|
||||||
|
|
@ -193,7 +210,7 @@ int main() {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
server->on_error = [](shared_ptr<HttpServer::Request> /*request*/, const SimpleWeb::error_code /*ec*/) {
|
server->on_error = [](shared_ptr<HttpServer::Request> /*request*/, const SimpleWeb::error_code /*ec*/) {
|
||||||
// handle errors here
|
// handle errors here
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -226,20 +243,3 @@ int main() {
|
||||||
|
|
||||||
server_thread.join();
|
server_thread.join();
|
||||||
}
|
}
|
||||||
|
|
||||||
void default_resource_send(const shared_ptr<HttpServer::Response> &response, const shared_ptr<ifstream> &ifs) {
|
|
||||||
//read and send 128 KB at a time
|
|
||||||
static vector<char> buffer(131072); // Safe when server is running on one thread
|
|
||||||
streamsize read_length;
|
|
||||||
if((read_length = ifs->read(&buffer[0], buffer.size()).gcount()) > 0) {
|
|
||||||
response->write(&buffer[0], read_length);
|
|
||||||
if(read_length == static_cast<streamsize>(buffer.size())) {
|
|
||||||
response->send([response, ifs](const SimpleWeb::error_code &ec) {
|
|
||||||
if(!ec)
|
|
||||||
default_resource_send(response, ifs);
|
|
||||||
else
|
|
||||||
cerr << "Connection interrupted" << endl;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -20,9 +20,6 @@ using namespace boost::property_tree;
|
||||||
typedef SimpleWeb::Server<SimpleWeb::HTTPS> HttpsServer;
|
typedef SimpleWeb::Server<SimpleWeb::HTTPS> HttpsServer;
|
||||||
typedef SimpleWeb::Client<SimpleWeb::HTTPS> HttpsClient;
|
typedef SimpleWeb::Client<SimpleWeb::HTTPS> HttpsClient;
|
||||||
|
|
||||||
//Added for the default_resource example
|
|
||||||
void default_resource_send(const shared_ptr<HttpsServer::Response> &response, const shared_ptr<ifstream> &ifs);
|
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
//HTTPS-server at port 8080 using 1 thread
|
//HTTPS-server at port 8080 using 1 thread
|
||||||
//Unless you do more heavy non-threaded processing in the resources,
|
//Unless you do more heavy non-threaded processing in the resources,
|
||||||
|
|
@ -181,7 +178,27 @@ int main() {
|
||||||
|
|
||||||
header.emplace("Content-Length", to_string(length));
|
header.emplace("Content-Length", to_string(length));
|
||||||
response->write(header);
|
response->write(header);
|
||||||
default_resource_send(response, ifs);
|
|
||||||
|
class FileServer {
|
||||||
|
public:
|
||||||
|
static void read_and_send(const shared_ptr<HttpsServer::Response> &response, const shared_ptr<ifstream> &ifs) {
|
||||||
|
//read and send 128 KB at a time
|
||||||
|
static vector<char> buffer(131072); // Safe when server is running on one thread
|
||||||
|
streamsize read_length;
|
||||||
|
if((read_length = ifs->read(&buffer[0], buffer.size()).gcount()) > 0) {
|
||||||
|
response->write(&buffer[0], read_length);
|
||||||
|
if(read_length == static_cast<streamsize>(buffer.size())) {
|
||||||
|
response->send([response, ifs](const SimpleWeb::error_code &ec) {
|
||||||
|
if(!ec)
|
||||||
|
read_and_send(response, ifs);
|
||||||
|
else
|
||||||
|
cerr << "Connection interrupted" << endl;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
FileServer::read_and_send(response, ifs);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
throw invalid_argument("could not read file");
|
throw invalid_argument("could not read file");
|
||||||
|
|
@ -225,20 +242,3 @@ int main() {
|
||||||
|
|
||||||
server_thread.join();
|
server_thread.join();
|
||||||
}
|
}
|
||||||
|
|
||||||
void default_resource_send(const shared_ptr<HttpsServer::Response> &response, const shared_ptr<ifstream> &ifs) {
|
|
||||||
//read and send 128 KB at a time
|
|
||||||
static vector<char> buffer(131072); // Safe when server is running on one thread
|
|
||||||
streamsize read_length;
|
|
||||||
if((read_length = ifs->read(&buffer[0], buffer.size()).gcount()) > 0) {
|
|
||||||
response->write(&buffer[0], read_length);
|
|
||||||
if(read_length == static_cast<streamsize>(buffer.size())) {
|
|
||||||
response->send([response, ifs](const SimpleWeb::error_code &ec) {
|
|
||||||
if(!ec)
|
|
||||||
default_resource_send(response, ifs);
|
|
||||||
else
|
|
||||||
cerr << "Connection interrupted" << endl;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue