async fn stream_messages(
&self,
request: Request<Streaming<StreamRequest>>,
) -> Result<Response<Self::StreamMessagesStream>, Status> {
let (mut tx, rx) = mpsc::channel(4);
tokio::spawn(async move {
let mut stream = request.into_inner();
while let Some(message) = stream.message().await.unwrap() {
let response = StreamResponse {
message: format!("Received: {}", message.data),
};
tx.send(Ok(response)).await.unwrap();
}
});
Ok(Response::new(rx))
}
Отрезок из стандартного примера если что (ну вернее его скопировал Bing Ai из него и мне выдал) я не совсем понимаю, какое действие происходит в конце, и куда уходит return? Типо собирается какой то поток, который отправляет респонзы из rx на клиент?
return Ok(Response::new(rx)); == Ok(Response::new(rx))(если в последней строчке блока)
Да, я понял, я просто не совсем понимаю, куда он возвращает значение, и что из себя значение представляет
Не пониманию, что именно непонятно. Значение из метода возвращается туда, где этот метод был вызван. Непонятно откуда этот метод вызывается? В vscode есть "Go to references"
Пытаюсь понять механизм, по которому в tonic работают стримы сообщений, чтобы не копипастить в тупую из примеров, а быть в состоянии осмысленно самостоятельно реализовывать что мне нужно
Ну да, посмотреть где этот stream_messages вызывается и что там делают с возвращённым rx
Там код из кодгена, по нему не работают переходы
Там можно сделать .out_dir("src") и подключать не через include_bytes
Обсуждают сегодня