Комментарии 8
А можно ли ставить хандлер таймаутов/закрытий сокетов? А то имеет полный смысл освободить ресурсы, если ответ уйдёт в никуда.
На данный момент можно повесить только after-write-нотификаторы. Т.е. в методы flush
и done
можно передать лямбду, которая будет вызвана при завершении (успешном или нет) операции записи. В этой лямбде можно проанализировать результат и, если результат записи очередного chunk-а отрицательный, предпринять какие-то действия по прекращению текущей операции.
Повесить нотификатор на соединение сейчас нельзя. Нам эта функциональность не была нужна (когда микросервисы между собой общаются внутри собственной сети разрывы связи — это редкая штука). И никто нас об этом и не просил пока.
Да и само соединение, в принципе, от пользователя спрятано. Через request_handle можно получить connection_id, но это и все. При этом с один соединением может быть ассоциировано сразу несколько request-ов (в результате использования pipelining-а клиентом, к примеру).
В версии 0.5.1 мы добавили возможность установить слушатель состояния подключений. Так что теперь можно реагировать на потерю соединения с клиентом.
Да, вероятно, нужно вставить update в текст статьи. Когда на отдельной рабочей нити вызывается flush
или done
, то RESTinio инициирует операцию записи в канал. Но запись будет сделана на той нити, где работает сам RESTinio (т.е. там, где выполняется весь I/O и где вызываются request_handler-ы). А пока RESTinio где-то делает запись в канал, эта самая отдельная рабочая нить может делать следующую часть ответа, а затем снова вызвать flush
или done
.
Вызов create_response()
сам по себе ничего не записывает. Он только создает response_builder
. А вот методы flush
и done
у response_builder
-а уже инициируют запись.
RESTinio — это асинхронный HTTP-сервер. Асинхронный