Rustのtiny-httpのリクエストハンドリング
#tiny-http #Rust
以下のドキュメントにあるコードの解釈。動かしてはなく、コードを見て解釈している。
以下は基礎。リクエスト処理の無限ループ。
// do something with the requestでブロックすれば、新しいリクエストは処理できないはず。
code:rs
loop {
// blocks until the next request is received
let request = match server.recv() {
Ok(rq) => rq,
Err(e) => { println!("error: {}", e); break }
};
// do something with the request
// ...
}
(0 .. 4)の4はコア数にすることが想定されていそうなコード
上記と同じリクエストの無限ループがあるが、4つのスレッド内各自に無限ループがある作りになっていると思う。
code:rs
let server = Arc::new(server);
let mut guards = Vec::with_capacity(4);
for _ in (0 .. 4) {
let server = server.clone();
let guard = thread::spawn(move || {
loop {
let rq = server.recv().unwrap();
// ...
}
});
guards.push(guard);
}