【发布时间】:2015-12-12 17:12:27
【问题描述】:
我正在编写一个使用分布式哈希表 (DHT) 将数据分发到各个节点的应用程序。插入数据时,我必须遍历所有数据并将各个部分写入不同的节点。我不想为每次写入打开一个新的TcpStream 对象,而是想维护一个流映射,我可以根据需要使用它来写入数据。我对 Rust 语言非常陌生,我遇到了生命周期问题,特别是错误
不能将“流”作为可变借用,因为它已经作为可变借用了
“流”的寿命不够长。
我确信有一种花哨的 Rust 方法可以做到这一点。我正在使用的代码如下。
let mut streams = HashMap::new();
...
//get socket address to send data too
loop {
match streams.get(&socket_addr) {
Some(stream) => {
capnp::serialize::write_message(*stream, &msg_builder).unwrap();
},
None => {
let mut stream = TcpStream::connect(socket_addr).unwrap();
streams.insert(socket_addr, &mut stream);
capnp::serialize::write_message(&mut stream, &msg_builder).unwrap();
}
}
}
【问题讨论】:
-
欢迎来到 Stack Overflow!它是frowned upon to ask multiple questions in one post。此外,您的问题已经被问到。 “活得不够长”可以是stackoverflow.com/q/31775915/155423,“已经被借用为可变”可以是stackoverflow.com/q/28512394/155423。请在提出问题之前搜索重复项,然后描述为什么您的问题与之前的问题不同(如果您确定它不重复)。
标签: rust