Здравствуйте, коллеги!
Вопросы по библиотеке cpp-netlib (можно взять
тут или
тут). Никто ее не использовал? Библиотека хардкорно плюсовая, использует boost::asio, я не смог с ней разобраться ;( Непонятно следующее:
1) там HTTP-сервер последовательный что-ли? Т.е. запросы обрабатываются только по очереди? А можно как-то исхитриться и сделать параллельную обработку запросов?
2) Клиента можно как-то обрубить после вызова client.get() (client.post() etc) — чтобы реализовать неблокирующую скачку с возможностью отмены — в одном потоке клиента запускаем, а в другом обрабатываем UI и по нажатию отмены прерываем клиента?
3) Для клиента boost::asio тянет за собой openssl, можно как-то обрубить его, если мне не нужно HTTPS?
M> Вопросы по библиотеке cpp-netlib (можно взять тут или тут). Никто ее не использовал? Библиотека хардкорно плюсовая, использует boost::asio, я не смог с ней разобраться ;( Непонятно следующее:
M>1) там HTTP-сервер последовательный что-ли? Т.е. запросы обрабатываются только по очереди? А можно как-то исхитриться и сделать параллельную обработку запросов?
да вроде создает на каждое соединение по потоку. посмотри в исходниках — server.hpp, там вроде бы все очевидно
M>2) Клиента можно как-то обрубить после вызова client.get() (client.post() etc) — чтобы реализовать неблокирующую скачку с возможностью отмены — в одном потоке клиента запускаем, а в другом обрабатываем UI и по нажатию отмены прерываем клиента?
M>3) Для клиента boost::asio тянет за собой openssl, можно как-то обрубить его, если мне не нужно HTTPS?
в качестве клиента ее не использовал
Здравствуйте, 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, там же асинхронные сокеты, в одном потоке все обрабатываются, могли и обработку запросов в том же потоке сделать.
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