cpp-netlib
От: silart  
Дата: 18.06.14 15:59
Оценка:
Добрый день!

Нужно сделать асинхронный http сервер. Есть хандлер:

    namespace http = boost::network::http;
    namespace utils = boost::network::utils;

    class AsyncHandler;
    class SyncHandler;

    typedef http::async_server<AsyncHandler>    AsyncServer;
    typedef http::server<SyncHandler>        SyncServer;
//...

class AsyncHandler
{
public:
    typedef AsyncServer            Server;
    typedef Server::request            Request;
    typedef Server::response        Response;
    typedef Server::connection        Connection;
    typedef Server::connection_ptr    ConnectionPtr;
    typedef Server::response_header    ResponseHeader;
    typedef Server::string_type        StringType;

public:
     AsyncHandler()
        {}

    void operator()(const Request& request,
            ConnectionPtr connection);
};

//...
void AsyncHandler::operator()(const Request& request, ConnectionPtr connection)
{
static Server::response_header error_headers[] =
    {
        { "Connection", "close" }
    };

        std::string dest = request.destination;
        long port = request.source_port;
        std::string src = request.source;
        std::string body = request.body;

    if (request.method == "HEAD" || request.method == "GET")
    {
        // ...
    }
    else
    if (request.method == "POST")
    {
        // ...
    }
    else
    {
        connection->set_status(Server::connection::not_supported);
        connection->set_headers(boost::make_iterator_range(std::begin(error_headers), std::end(error_headers) ) );
        connection->write("Method not supported.");
    }
}


В документации есть такая картинка:


Нужно получить: authority, path, query и fragment

Кажется должно быть все просто, но примеров очень мало.
Re: cpp-netlib
От: zaufi Земля  
Дата: 19.06.14 08:57
Оценка: 1 (1) +1
Здравствуйте, silart, Вы писали:

S>Добрый день!


S>Нужно сделать асинхронный http сервер. Есть хандлер:


а что, эта библа уже наконец допилена до состояния, когда ее собственные примеры компилятся? %)

я смотрел на нее, честно признаюсь, пару лет назад, последний раз... все было далеко от production применения...

S>Нужно получить: authority, path, query и fragment


в ней есть класс uri -- это все просто его gettеры... в одном проекте я использовал его отдельно от этой библы

S>Кажется должно быть все просто, но примеров очень мало.


ЗЫ. я бы не стал связываться с этой библой (тем более, что примеров все еще мало)...
Re[2]: cpp-netlib
От: PM  
Дата: 19.06.14 12:12
Оценка:
Здравствуйте, zaufi, Вы писали:

Z>ЗЫ. я бы не стал связываться с этой библой (тем более, что примеров все еще мало)...


Полностью согласен, еще только добавлю что использовать класс uri из нее тоже нужно с оглядкой. Для разбора на составляющие в uri используется парсер (на Boost.Spirit) который ожидает что строка URI закодирована по RFC, т.е. никаких non-ASCII символов нигде не должно быть. И функции для кодирования строки (например из UTF-8) в RFC 3987 я в библиотеке не обнаружил.
Re[2]: cpp-netlib
От: silart  
Дата: 19.06.14 14:08
Оценка:
Здравствуйте, zaufi!:

Ого! Вы меня расстроили ребята. А так вроде все красиво выглядит. Примеры что есть собираются. Я даже слабал небольшой асинхронный сервер. Но вот достучаться до query что-то не смог, хоть и есть класс uri. Там с request'ами замут какой-то. Они частично специализируются в зависимости от тэгов, я так и не понял для чего все это.

Может тогда посоветуете какую либу можно использовать для подобных целей? Ну чтобы сделать асинхронный http сервер на С++. Я сам раньше с http опыта не имел.
Re[3]: cpp-netlib
От: PM  
Дата: 20.06.14 05:49
Оценка: 9 (1)
Здравствуйте, silart, Вы писали:

S>Может тогда посоветуете какую либу можно использовать для подобных целей? Ну чтобы сделать асинхронный http сервер на С++. Я сам раньше с http опыта не имел.


Зависит от требований к серверу, существующие бибилиотеки для работы с HTTP — конструктор из серии "сделай сам". Если удалось собрать cpp-netlib, значит в проекте нет проблем с использованием Boost и более-менее свежего компилятора.

В разное время в разных проектах я смотрел:

Re[3]: cpp-netlib
От: PPA Россия http://flylinkdc.blogspot.com/
Дата: 20.06.14 07:07
Оценка:
Здравствуйте, silart, Вы писали:

S>Может тогда посоветуете какую либу можно использовать для подобных целей? Ну чтобы сделать асинхронный http сервер на С++. Я сам раньше с http опыта не имел.


Я выбрал себе https://github.com/cesanta/mongoose
в примерах все доступно и просто.
и по тестам он оказался хорош: http://habrahabr.ru/post/207460
Re[4]: cpp-netlib
От: silart  
Дата: 20.06.14 07:39
Оценка:
Здравствуйте, PM, Вы писали:

PM>

Очень интересен Pion Network Library. Основан на boost asio, что для меня является плюсом. Однако документации я что-то не нашел. Может плохо искал? В архиве конечно идет доксигеновская документация. Но хотелось бы с примерами.
Нашел вот этот блог, но там только Hello World.
Re[5]: cpp-netlib
От: PM  
Дата: 20.06.14 11:23
Оценка:
Здравствуйте, silart, Вы писали:

S>Очень интересен Pion Network Library. Основан на boost asio, что для меня является плюсом. Однако документации я что-то не нашел. Может плохо искал? В архиве конечно идет доксигеновская документация. Но хотелось бы с примерами.


Не знаю, я и доксигеновскую не читал, сразу код смотрел при необходимости. Но вот ничего для работы с URL в Pion нет Пришлось писать свой велосипед, который кстати планирую заменить на реализацию из Urdl

S>Нашел вот этот блог, но там только Hello World.


Там немног устаревшие примеры, в Pion версии 5.0 слегка поменяли API (сделали имена классов в нижнем регистре)
Re[4]: cpp-netlib
От: dr. Acula Украина  
Дата: 26.06.14 12:36
Оценка:
S>>Может тогда посоветуете какую либу можно использовать для подобных целей? Ну чтобы сделать асинхронный http сервер на С++. Я сам раньше с http опыта не имел.

PPA>Я выбрал себе https://github.com/cesanta/mongoose

PPA>в примерах все доступно и просто.
В примерах — да.
Реально — есть проблемы.
PPA>и по тестам он оказался хорош: http://habrahabr.ru/post/207460
Тест ни о чём.
Re[5]: cpp-netlib
От: PPA Россия http://flylinkdc.blogspot.com/
Дата: 01.07.14 10:19
Оценка:
Здравствуйте, dr. Acula, Вы писали:
PPA>>Я выбрал себе https://github.com/cesanta/mongoose
PPA>>в примерах все доступно и просто.
DA>В примерах — да.
DA>Реально — есть проблемы.

А расскажите какого плана проблемы — падает/течет/тормозит?
не умеет что-то делать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.