У нас очередной релиз. Наша легковесная C++14 библиотека для встраивания асинхронного HTTP/WebSocket сервера в C++ приложения, RESTinio, обновилась до версии 0.4.8. Изменений не так много, но среди них можно выделить одно весьма важное: нотификаторы для операций записи.
Почему нотификаторы важны? Потому что когда фреймворк для вашего же удобства скрывает от вас всю механику операций ввода-вывода, то вы не знаете, когда именно часть вашего ответа клиенту будет записана в сокет. А это знание может потребоваться, если вы отсылаете большой ответ порциями и вам нужно выстроить эти порции в очередь, чтобы отправлять следующую порцию лишь после того, как уйдет предыдущая. Ну вот, скажем, нужно вам отдать 500MiB порциями по 5MiB, как вам это сделать? Отдать RESTinio все эти 500MiB сразу и пускай RESTinio с ними сам разбирается? А что, если вам нужно отдавать по 500MiB не одному клиенту, а сотне клиентов, или тысяче клиентов?
Вот тут-то нотификаторы и будут полезны. Вы пишете очередную порцию в response, затем вызываете flush() и передаете во flush() нотификатор. RESTinio запишет ваши данные и дернет ваш нотификатор когда запись закончится (положительно или отрицательно). И в этом нотификаторе вы сможете инициировать запись следующей порции.
Минималистичный пример использования нотификаторов:
#include <restinio/all.hpp> #include <iostream> int main() { restinio::run( restinio::on_this_thread<>() .port(8080) .address("localhost") .request_handler([](auto req) { return req->create_response() .set_body("Hello, World!") .done( /* Notificator goes here */ [](const auto & ec ){ std::cout << "Sending response status: " << ec << std::endl; }); })); return 0; } |
Более актуальный пример можно найти в репозитории RESTinio.
В общем, не стесняемся, берем, пробуем, пользуемся, делимся впечатлениями. Любая конструктивная критика, соображения и предложения всячески приветствуются. Так же приветствуются лайки, плюсадынки и решары :) Кому не лень, можно плюсануть соответствующую тему на Reddit-е.
Комментариев нет:
Отправить комментарий