10.3 Стримы
| Вид rpc | Сигнатура |
|---|---|
| unary | rpc f(a: A) -> B |
| server-stream | rpc f(a: A) -> stream<B> |
| client-stream | rpc f(input: stream<A>) -> B |
| bidi | rpc 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: каждый элемент получает offsetu64; клиентская библиотека при разрыве переподключается и передаёт последний offset; генератор получает его вctx.resumeFrom: u64?.- Пайп
x |> f(args)означаетf(x, args); операторы стримов (filter,map,window, …) — функцииstd.stream(часть II).
Связанные диагностики
См. также
Исходник: docs/spec/oxl-standard.md