我正在尝试编写一个简单的 TCP 服务器来读取和广播消息。
我正在使用 Tokio,但我认为这更像是一个普遍的 Rust 问题。
我有一个具有共享状态的弧:
let state = Arc::new(Mutex::new(Shared::new(server_tx)));
后来我想生成 2 个线程,它们将使用对该状态的引用:
let server = listener.incoming().for_each(move |socket| {
// error[E0382]: capture of moved value: `state`
process(socket, state.clone());
Ok(())
}).map_err(|err| {
println!("accept error = {:?}", err);
});
let receive_sensor_messages = sensors_rx.for_each(move |line| {
println!("Received sensor message, broadcasting: {:?}", line);
// error[E0597]: borrowed value does not live long enough
// error[E0507]: cannot move out of borrowed content
for (_, tx) in state.clone().lock().unwrap().clients {
tx.unbounded_send(line.clone()).unwrap();
}
Ok(())
}).map_err(|err| {
println!("line …
Run Code Online (Sandbox Code Playgroud) rust ×1