【发布时间】:2019-07-21 23:48:10
【问题描述】:
我有一个服务器应用程序,我想将套接字和其他信息保存在向量中。现在,为方便起见,我想使用可通过 Mutex game_sessions 访问的全局静态向量。
我知道在 Rust 中保留全局对象并不是最好的主意,但由于这主要是原型工作,它会大大简化这部分。
错误可以在下面找到,但它要求为 PlayerSession 的 Option<&TcpStream> 属性提供生命周期说明符。
我假设它要求一个 `static 生命周期说明符。现在,我知道 Mutex 和 Vec 将具有静态生命周期,但我不明白为什么向量内的元素必须是静态的。
有什么办法可以使这项工作?我知道还有其他方法可以做到这一点,但我想知道为什么这种特定方法不起作用。
use std::net::{TcpStream};
use std::sync::*;
#[derive(PartialEq)]
pub enum SessionState {
Closed,
Active
}
pub struct PlayerSession {
pub state: SessionState,
pub player_socket: Option<&TcpStream>
}
lazy_static! {
static ref game_sessions: Mutex<Vec<PlayerSession>> = Mutex::new(vec![]);
}
pub fn create_player_session(client_socket: &TcpStream) {
let mut x = game_sessions.lock().unwrap();
x.push(PlayerSession {
state: SessionState::Closed,
player_socket: Some(client_socket)
});
}
编译时报错:
error[E0106]: missing lifetime specifier
--> src\sessions.rs:12:31
|
12 | pub player_socket: Option<&TcpStream>
| ^ expected lifetime parameter
还在学习这门语言,请原谅代码质量不佳,继续努力。
【问题讨论】:
标签: rust