我已经实现了一个聊天服务器,它存储连接的用户,如果用户发送消息,服务器会将其回显给所有其他客户端。
我有 C++ 背景,所以我创建了一个全局static mut USERS:Vec<TcpStream>
变量来存储和访问用户。
我正在处理来自 main() 的连接用户,如下所示:
#[async_std::main]
async fn main() -> io::Result<()>{
let listener = TcpListener::bind("127.0.0.1:14530").await?;
loop {
let (stream, addr) = listener.accept().await?;
unsafe {
USERS.push(stream.clone());
}
task::spawn(on_connection(stream, addr));
}
}
功能on_connection
是:
async fn on_connection(mut stream:TcpStream, addr:SocketAddr) -> io::Result<()> {
println!("New Connection: {}", addr.to_string());
let mut buffer = [0u8; 1024];
loop {
let len = stream.read(&mut buffer).await?;
if len > 0 {
print!("Message from {} => {}", addr.to_string(), String::from_utf8_lossy(&buffer));
unsafe {
for mut user in USERS.clone() {
user.write(&buffer).await?;
}
}
}
else {
println!("Disconnected: {}", addr.to_string());
break
}
};
Ok(())
}
像这样使用 Rust 可以吗?
我想让应用程序安全并使用 Rust 的安全环境而没有“不安全”。但是我不知道如何存储全局用户以供以后访问而不会不安全。