Restbed предлагает асинхронные возможности клиент/сервер через ASIO и C++ 11. У нас есть много examples, и документация скоро будет доступна тем, кто не любит читать файлы заголовков.
#include <memory>
#include <cstdlib>
#include <restbed>
using namespace std;
using namespace restbed;
void post_method_handler(const shared_ptr<Session> session)
{
const auto request = session->get_request();
int content_length = 0;
request->get_header("Content-Length", content_length);
session->fetch(content_length, [ ](const shared_ptr<Session> session, const Bytes & body)
{
fprintf(stdout, "%.*s\n", (int) body.size(), body.data());
session->close(OK, "Hello, World!", { { "Content-Length", "13" } });
});
}
int main(const int, const char**)
{
auto resource = make_shared<Resource>();
resource->set_path("/resource");
resource->set_method_handler("POST", post_method_handler);
auto settings = make_shared<Settings>();
settings->set_port(1984);
settings->set_default_header("Connection", "close");
Service service;
service.publish(resource);
service.start(settings);
return EXIT_SUCCESS;
}
Следующая важная особенность позволит использовать зависимости от уровня приложений.
auto settings = make_shared<Settings>();
Service service;
service.add_application_layer(http_10_instance);
service.add_application_layer(http_11_instance);
service.add_application_layer(http2_instance);
service.add_application_layer(spdy_instance);
service.start(settings);
Почему это должно быть C++? Почему бы не использовать [Laravel] (http://laravel.com/) или [node.js] (http://nodejs.org) или [Rails] (http://rubyonrails.org)? – erapert
https://github.com/eidheim/Simple-Web-Server на самом деле довольно аккуратный, потому что он использует C++ 11 lambdas. –
Его не сложно понять ОТДЫХ. Только что прочитал, это будет мой совет. Если существующие решения переработаны для вашего проекта, тогда просто напишите свой собственный сервер. Это не слишком сложно. Вы можете использовать мой класс TCPSocket, если хотите: https: // github.com/samredway/ssocks –