OxL Справочник OxL
РусскийEnglish

10.3 Стримы

Вид rpcСигнатура
unaryrpc f(a: A) -> B
server-streamrpc f(a: A) -> stream<B>
client-streamrpc f(input: stream<A>) -> B
bidirpc f(input: stream<A>) -> stream<B>
  • Тип stream<T, E = never>. Удалённый стрим имеет ошибки E | NetError.
  • Генератор: функция с результатом stream<T, E> и yield в теле. Возврат из тела завершает стрим, fail e завершает его ошибкой.
  • Локально стрим работает как асинхронный генератор: элементы передаются потребителю без сериализации.
  • for await x in s { … }: при ошибке стрима цикл пробрасывает её как ? (ошибка ДОЛЖНА входить в тип функции); for await r in s.results() получает T | E без проброса.
  • Backpressure: производитель приостанавливается в yield, когда потребитель не успевает (локально — буфер 1; по сети — окно кредитов @window).
  • @resumable: каждый элемент получает offset u64; клиентская библиотека при разрыве переподключается и передаёт последний offset; генератор получает его в ctx.resumeFrom: u64?.
  • Пайп x |> f(args) означает f(x, args); операторы стримов (filter, map, window, …) — функции std.stream (часть II).

yield-outside-stream

См. также

Исходник: docs/spec/oxl-standard.md