1
:RustとTokioを使用して複数の並行サーバーを構築するにはどうすればよいですか?私は錆や東京と異なるポートで複数の同時サーバを構築しているよ
let mut core = Core::new().unwrap();
let handle = core.handle();
// I want to bind to multiple port here if it's possible with simple addresses
let addr = "127.0.0.1:80".parse().unwrap();
let addr2 = "127.0.0.1:443".parse().unwrap();
// Or here if there is a special function on the TcpListener
let sock = TcpListener::bind(&addr, &handle).unwrap();
// Or here if there is a special function on the sock
let server = sock.incoming().for_each(|(client_stream, remote_addr)| {
// And then retrieve the current port in the callback
println!("Receive connection on {}!", mysterious_function_to_retrieve_the_port);
Ok(())
});
core.run(server).unwrap();
は、複数のポートを聞くために東京であっ選択肢であるか、私は、各ポートのためのシンプルなスレッドを作成する必要がありますし、それぞれCore::new()
を実行しますか? rust-scoped-poolへ
おかげで、私が持っている:
let pool = Pool::new(2);
let mut listening_on = ["127.0.0.1:80", "127.0.0.1:443"];
pool.scoped(|scope| {
for address in &mut listening_on {
scope.execute(move ||{
let mut core = Core::new().unwrap();
let handle = core.handle();
let addr = address.parse().unwrap();
let sock = TcpListener::bind(&addr, &handle).unwrap();
let server = sock.incoming().for_each(|(client_stream, remote_addr)| {
println!("Receive connection on {}!", address);
Ok(())
});
core.run(server).unwrap();
});
}
});
錆スコーププールは、私は複数のスレッドを実行し、それらを産卵した後、永遠に待つことを発見した唯一のソリューションです。私はそれが動作していると思うが、私はより単純な解決策が存在するかどうか疑問に思っていた。
私は、サンプルコード対物語で混乱しています。 (1)1つのサーバーオブジェクトが複数のポートをリッスンしているか、(2)複数のサーバーオブジェクトが1つのポートをリッスンしているかを明確にすることができますか? –
1つのサーバーオブジェクトが複数のポートをリッスンしますが、このサーバーは選択したポートにアクセスできる必要があります。 –
現在進行中の作業でメインポストを編集しました –