嗨,我是Rust的新手,我正在学习Async(时雄crate)和所有权。为了做到这一点,我正在开发一个聊天服务器,我想有一些基本的登录选项。为此,我使用了一个HashMap,将用户保存为key,密码保存为value。代码如下:
async fn main(){
let mut users_map: HashMap<String,String> = HashMap::new();
let listener = TcpListener::bind("localhost:8881").await.unwrap();
//stuff
loop{
let (mut socket, addr) = listener.accept().await.unwrap();
//more stuff
tokio::spawn( async move {
if users_map.contains_key(&user)==true{ //Here is the problem
//more stuff
users_map.insert(user, password);
}
}
}
}
所以根据我在Rust书中读到的,当我使用if时,值会移动到那个语句,这样我就不会在那个作用域之外丢失它。但是,我该如何使用为所有作用域定义的哈希Map进行操作呢?我尝试过克隆,但是如果我克隆它,我会为每个连接接受创建一个哈希Map,所以这真的很糟糕,因为我希望所有的“任务”都有一个共享的哈希Map。
谢谢
1条答案
按热度按时间lg40wkob1#
您可以使用
Arc
和DashMap
。DashMap
来自dashmap
板条箱。例如: