-
Notifications
You must be signed in to change notification settings - Fork 202
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Clients should attempt to automatically reconnect. #118
Comments
Any progress on this? :) |
Nope, I've been pretty busy with work/life the last few months and haven't been actively developing new features. I'd be happy to mentor on this or any other feature request. |
With #199, this can be implemented in the transport layer. However, I think this could also be done at a higher level of abstraction. I'm imagining some kind of load balancer that is represented by a |
With something like stubborn-io this could mostly be a drop-in replacement for TCP. |
Yes, seems stubborn-io is a good reconnect implementation; are we considering to integrate the two? |
I'm not sure we need any specific integration in use std::{iter, time::Duration};
use stubborn_io::{ReconnectOptions, StubbornTcpStream};
use tarpc::{client::Config, serde_transport::Transport};
use tokio::net::ToSocketAddrs;
pub async fn client_connect<A: ToSocketAddrs + Unpin + Clone + Send + Sync + 'static>(
addr: A,
) -> io::Result<Client> {
let reconnect_opts = ReconnectOptions::new()
.with_exit_if_first_connect_fails(false)
.with_retries_generator(|| iter::repeat(Duration::from_secs(1)));
let tcp_stream = StubbornTcpStream::connect_with_options(addr, reconnect_opts).await?;
let transport = Transport::from((tcp_stream, Json::default()));
Client::new(Config::default(), transport).spawn()
} |
I'm just not sure how this example works in practice. I assume the |
The field Currently, the client-side timeout that enforces the request deadline is only applied to the response future after the request is successfully buffered. This arguably should change, though, so that a large request backlog will time out further pending requests that haven't yet been buffered. |
If we do this, does that mean
Client::connect
will never returnconnection_refused
? Does it mean we'll need to set timeouts on all requests, since it could loop endlessly trying to connect?The text was updated successfully, but these errors were encountered: