从rocket_ws
文档(https://api.rocket.rs/v0.5/rocket_ws/)中,我知道我可以用这段代码与客户端建立WebSocket连接:
#[get("/echo?channel")]
fn echo_channel(ws: ws::WebSocket) -> ws::Channel<'static> {
use rocket::futures::{SinkExt, StreamExt};
ws.channel(move |mut stream| Box::pin(async move {
while let Some(message) = stream.next().await {
let _ = stream.send(message?).await;
}
Ok(())
}))
字符串
}
但是,我如何检测到连接已关闭,客户端已断开连接?
这个例子只展示了用stream.next()
阅读消息的用例,但是如果我不期望从客户端收到消息,而只是想用let mut interval = interval(Duration::from_secs(10));
定期向他发送新值(用类似let _ = stream.send(ws::Message::Text(json!(reading).to_string())).await;
的东西),该怎么办?
1条答案
按热度按时间zzoitvuj1#
要检测客户端何时从WebSocket断开连接,您可以侦听从客户端发送的
Close
消息。代码看起来像这样:
字符串
因此,在Rust中使用rocket_ws处理websockets的整个代码看起来像这样:
型