下面是一个使用std::net
的非常简单的示例.它是针对当前的 rust 迹而开发的.*1而且
注意这个例子;它被简化了;如果绑定、侦听或接受产生错误,您可能不希望它惊慌失措.
use std::io::Write;
use std::net::TcpListener;
use std::thread;
fn main() {
let listener = TcpListener::bind("127.0.0.1:9123").unwrap();
println!("listening started, ready to accept");
for stream in listener.incoming() {
thread::spawn(|| {
let mut stream = stream.unwrap();
stream.write(b"Hello World\r\n").unwrap();
});
}
}
注意关于接受的范例;您必须自己启动accept()
请求(在本例中,我们使用incoming()
迭代器,每次只调用accept()
),这样您就可以控制有哪些任务.
因此,我将实际的流处理代码放在了一个单独的线程中,但它不需要用于非常短的请求(这只意味着在处理第一个请求时,您将无法处理第二个请求);你也可以go 掉这两行的thread::spawn(|| { ... })
.使用额外的线程也可以提供一定程度的隔离;如果线程展开,服务器作为一个整体不会死亡(但是请记住,在展开时内存不足或析构函数死机会导致整个服务器死亡).