目前rust websocket文档较少,最近为了实现部分工作需要使用rust去做websocket链接网上找了不少,很多没有太多参考价值,websocket 在rust中要保持长连接,期间需要不停的去ping,不然会中断,但是使用线程在常规情况下闭包又无法在循环数据的时候持续的ping,所以引入了一下第三方包。
Cargo.toml
[dependencies]
tokio = { version = "1.19.2", features = ["rt", "rt-multi-thread", "macros"] }
websockets= "0.3.0"
futures = "0.3.21"
main.rs
use std::thread;
use std::time::Duration;
use websockets::{WebSocket, WebSocketWriteHalf};
#[tokio::main]
async fn main() {
// 建立websocket连接
let mut ws = WebSocket::connect("wss://xxxxxxx").await.unwrap();
let (mut r, mut w) = ws.split();
let send_str = "你想提交的内容";
w.send_text(send_str.to_string()).await.unwrap();
// 定期推送ping,如果想改这里自己建立信息通讯mpsc::channel(0) 发送不同的数据;
thread::spawn(move || {
loop {
// 这里因为是async自己包裹一下不然跑步起来
tokio::runtime::Builder::new_multi_thread()
.enable_all()
.build()
.unwrap()
.block_on(async {
// 睡眠定期推送数据
thread::sleep(Duration::new(20, 0));
w.send_text("ping".parse().unwrap()).await.unwrap();
});
}
});
// 循环打印数据
loop {
let s = r.receive().await.unwrap();
let (ss, b, snake_case) = s.as_text().unwrap();
println!("Got:{}", ss);
}
}
————————————————
原文链接:https://blog.csdn.net/theGrass_/article/details/125321274
如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!
txttool.com 说一段 esp56物联 查询128 IP查询