Pull to refresh

Comments 8

А можно ли ставить хандлер таймаутов/закрытий сокетов? А то имеет полный смысл освободить ресурсы, если ответ уйдёт в никуда.

На данный момент можно повесить только after-write-нотификаторы. Т.е. в методы flush и done можно передать лямбду, которая будет вызвана при завершении (успешном или нет) операции записи. В этой лямбде можно проанализировать результат и, если результат записи очередного chunk-а отрицательный, предпринять какие-то действия по прекращению текущей операции.


Повесить нотификатор на соединение сейчас нельзя. Нам эта функциональность не была нужна (когда микросервисы между собой общаются внутри собственной сети разрывы связи — это редкая штука). И никто нас об этом и не просил пока.


Да и само соединение, в принципе, от пользователя спрятано. Через request_handle можно получить connection_id, но это и все. При этом с один соединением может быть ассоциировано сразу несколько request-ов (в результате использования pipelining-а клиентом, к примеру).

Единствнное, что не понятно, как в поток обработки ввода-вывода попадает сформированный ответ, или запись ответа в сокет происходит в потоке обработчика? По сути вопрос можно перефразировать так — что делает cmd.m_req->create_response()…

Да, вероятно, нужно вставить update в текст статьи. Когда на отдельной рабочей нити вызывается flush или done, то RESTinio инициирует операцию записи в канал. Но запись будет сделана на той нити, где работает сам RESTinio (т.е. там, где выполняется весь I/O и где вызываются request_handler-ы). А пока RESTinio где-то делает запись в канал, эта самая отдельная рабочая нить может делать следующую часть ответа, а затем снова вызвать flush или done.


Вызов create_response() сам по себе ничего не записывает. Он только создает response_builder. А вот методы flush и done у response_builder-а уже инициируют запись.

Как flush и done переносят данные в поток ввода-вывода? Через внутреннюю очередь?

ЕМНИП, через Asio-шный io_context::post, а там внутри уже какая-то очередь, наверное.

Понятно. Спасибо.
Sign up to leave a comment.

Articles