Closed putao520 closed 1 month ago
没有Clone
是为了减低误使用消息发送端的可能性,常见于客户端已关闭连接而服务端仍发送消息的情况(或者多个服务端线程/任务竞争)。如果你需要绕过所有权的限制可以使用ResponseWeakSender
,例如:
async fn handler(mut ws: WebSocket) -> WebSocket {
// 获取消息发送端的弱指针
let tx = ws.msg_sender().downgrade();
// 弱指针有static生命周期可以跨线程/异步任务使用
tokio::spawn(async {
// 弱指针升级成功后可以发送消息
while let Some(_tx) = tx.upgrade() {
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
}
// 升级失败表示连接已断开
});
// 其他代码
ws
}
谢谢大佬,这样可以了!
您好,现在的WebSocket没有clone,然后msg_sender方法返回的也是引用,请问那怎么实现获得一个sender实例从而实现在任意上下文向客户端发送信息呀?