cpp-netlib http сервер/клиент - вопросы
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 20.07.10 15:22
Оценка:
Здравствуйте, коллеги!

Вопросы по библиотеке cpp-netlib (можно взять тут или тут). Никто ее не использовал? Библиотека хардкорно плюсовая, использует boost::asio, я не смог с ней разобраться ;( Непонятно следующее:
1) там HTTP-сервер последовательный что-ли? Т.е. запросы обрабатываются только по очереди? А можно как-то исхитриться и сделать параллельную обработку запросов?
2) Клиента можно как-то обрубить после вызова client.get() (client.post() etc) — чтобы реализовать неблокирующую скачку с возможностью отмены — в одном потоке клиента запускаем, а в другом обрабатываем UI и по нажатию отмены прерываем клиента?
3) Для клиента boost::asio тянет за собой openssl, можно как-то обрубить его, если мне не нужно HTTPS?
Маньяк Робокряк колесит по городу
Re: cpp-netlib http сервер/клиент - вопросы
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 20.07.10 15:23
Оценка:
Здравствуйте, Marty, Вы писали:

И еще вопрос в догонку — можно ли наоборот, прикрутить к серверу HTTPS?
Маньяк Робокряк колесит по городу
Re: cpp-netlib http сервер/клиент - вопросы
От: sraider http://dvinogradov.blogspot.com
Дата: 03.08.10 13:59
Оценка:
M> Вопросы по библиотеке cpp-netlib (можно взять тут или тут). Никто ее не использовал? Библиотека хардкорно плюсовая, использует boost::asio, я не смог с ней разобраться ;( Непонятно следующее:
M>1) там HTTP-сервер последовательный что-ли? Т.е. запросы обрабатываются только по очереди? А можно как-то исхитриться и сделать параллельную обработку запросов?

да вроде создает на каждое соединение по потоку. посмотри в исходниках — server.hpp, там вроде бы все очевидно

M>2) Клиента можно как-то обрубить после вызова client.get() (client.post() etc) — чтобы реализовать неблокирующую скачку с возможностью отмены — в одном потоке клиента запускаем, а в другом обрабатываем UI и по нажатию отмены прерываем клиента?

M>3) Для клиента boost::asio тянет за собой openssl, можно как-то обрубить его, если мне не нужно HTTPS?

в качестве клиента ее не использовал
Re[2]: cpp-netlib http сервер/клиент - вопросы
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 03.08.10 14:23
Оценка:
Здравствуйте, sraider, Вы писали:

S>да вроде создает на каждое соединение по потоку. посмотри в исходниках — server.hpp, там вроде бы все очевидно

Да я смотрел, непонятно ничего, потому и спрашиваю

        Handler & handler_;
        io_service service_;
        tcp::acceptor acceptor_;
        shared_ptr<connection<Tag,Handler> > new_connection;

        void handle_accept(boost::system::error_code const & ec) {
            if (!ec) {
                new_connection->start();
                new_connection.reset(new connection<Tag,Handler>(service_, handler_));
                acceptor_.async_accept(new_connection->socket(),
                    bind(&basic_server<Tag,Handler>::handle_accept, this, boost::asio::placeholders::error));
            }


По идее, раз все крутится на boost::asio, там же асинхронные сокеты, в одном потоке все обрабатываются, могли и обработку запросов в том же потоке сделать.
Маньяк Робокряк колесит по городу
Re[3]: cpp-netlib http сервер/клиент - вопросы
От: sraider http://dvinogradov.blogspot.com
Дата: 03.08.10 21:58
Оценка:
S>>да вроде создает на каждое соединение по потоку. посмотри в исходниках — server.hpp, там вроде бы все очевидно
M>Да я смотрел, непонятно ничего, потому и спрашиваю ;)

M>
M>        Handler & handler_;
M>        io_service service_;
M>        tcp::acceptor acceptor_;
M>        shared_ptr<connection<Tag,Handler> > new_connection;

M>        void handle_accept(boost::system::error_code const & ec) {
M>            if (!ec) {
M>                new_connection->start();
M>                new_connection.reset(new connection<Tag,Handler>(service_, handler_));
M>                acceptor_.async_accept(new_connection->socket(),
M>                    bind(&basic_server<Tag,Handler>::handle_accept, this, boost::asio::placeholders::error));
M>            }
M>


по всей видимости здесь все в одном потоке

M>По идее, раз все крутится на boost::asio, там же асинхронные сокеты, в одном потоке все обрабатываются, могли и обработку запросов в том же потоке сделать.


boost.asio умеет по-разному.
посмотри HTTP Server 2 и 3: http://think-async.com/Asio/boost_asio_1_3_1/doc/html/boost_asio/examples.html
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.