サーバーに接続しようとするクライアントを作成できません。
- サーバーがダウンしている場合、無限ループで再試行する必要があります
- サーバーが起動していて接続が成功した場合、接続が失われた場合 (つまり、サーバーがクライアントを切断した場合)、クライアントは無限ループを再開してサーバーに接続しようとする必要があります。
サーバーに接続するコードは次のとおりです。現在、接続が失われると、プログラムは終了します。それを実装する最良の方法が何であるかはわかりません。多分私はFuture
無限ループで作成する必要がありますか?
extern crate tokio_line;
use tokio_line::LineCodec;
fn get_connection(handle: &Handle) -> Box<Future<Item = (), Error = io::Error>> {
let remote_addr = "127.0.0.1:9876".parse().unwrap();
let tcp = TcpStream::connect(&remote_addr, handle);
let client = tcp.and_then(|stream| {
let (sink, from_server) = stream.framed(LineCodec).split();
let reader = from_server.for_each(|message| {
println!("{}", message);
Ok(())
});
reader.map(|_| {
println!("CLIENT DISCONNECTED");
()
}).map_err(|err| err)
});
let client = client.map_err(|_| { panic!()});
Box::new(client)
}
fn main() {
let mut core = Core::new().unwrap();
let handle = core.handle();
let client = get_connection(&handle);
let client = client.and_then(|c| {
println!("Try to reconnect");
get_connection(&handle);
Ok(())
});
core.run(client).unwrap();
}
tokio-line クレートを次のように追加します。
tokio-line = { git = "https://github.com/tokio-rs/tokio-line" }