feat(client): allow to config http2 max concurrent reset streams (#2535)
Setting streams to 0 makes h2 work on wasm platforms without a `Instant::now` implementation.
This commit is contained in:
@@ -1151,6 +1151,21 @@ impl Builder {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Sets the maximum number of HTTP2 concurrent locally reset streams.
|
||||||
|
///
|
||||||
|
/// See the documentation of [`h2::client::Builder::max_concurrent_reset_streams`] for more
|
||||||
|
/// details.
|
||||||
|
///
|
||||||
|
/// The default value is determined by the `h2` crate.
|
||||||
|
///
|
||||||
|
/// [`h2::client::Builder::max_concurrent_reset_streams`]: https://docs.rs/h2/client/struct.Builder.html#method.max_concurrent_reset_streams
|
||||||
|
#[cfg(feature = "http2")]
|
||||||
|
#[cfg_attr(docsrs, doc(cfg(feature = "http2")))]
|
||||||
|
pub fn http2_max_concurrent_reset_streams(&mut self, max: usize) -> &mut Self {
|
||||||
|
self.conn_builder.http2_max_concurrent_reset_streams(max);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
/// Set whether to retry requests that get disrupted before ever starting
|
/// Set whether to retry requests that get disrupted before ever starting
|
||||||
/// to write.
|
/// to write.
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -530,7 +530,8 @@ impl Builder {
|
|||||||
&mut self,
|
&mut self,
|
||||||
enabled: bool,
|
enabled: bool,
|
||||||
) -> &mut Builder {
|
) -> &mut Builder {
|
||||||
self.h1_parser_config.allow_spaces_after_header_name_in_responses(enabled);
|
self.h1_parser_config
|
||||||
|
.allow_spaces_after_header_name_in_responses(enabled);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -701,6 +702,21 @@ impl Builder {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Sets the maximum number of HTTP2 concurrent locally reset streams.
|
||||||
|
///
|
||||||
|
/// See the documentation of [`h2::client::Builder::max_concurrent_reset_streams`] for more
|
||||||
|
/// details.
|
||||||
|
///
|
||||||
|
/// The default value is determined by the `h2` crate.
|
||||||
|
///
|
||||||
|
/// [`h2::client::Builder::max_concurrent_reset_streams`]: https://docs.rs/h2/client/struct.Builder.html#method.max_concurrent_reset_streams
|
||||||
|
#[cfg(feature = "http2")]
|
||||||
|
#[cfg_attr(docsrs, doc(cfg(feature = "http2")))]
|
||||||
|
pub fn http2_max_concurrent_reset_streams(&mut self, max: usize) -> &mut Self {
|
||||||
|
self.h2_builder.max_concurrent_reset_streams = Some(max);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
/// Constructs a connection with the configured options and IO.
|
/// Constructs a connection with the configured options and IO.
|
||||||
pub fn handshake<T, B>(
|
pub fn handshake<T, B>(
|
||||||
&self,
|
&self,
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ use tokio::io::{AsyncRead, AsyncWrite};
|
|||||||
|
|
||||||
use super::{decode_content_length, ping, PipeToSendStream, SendBuf};
|
use super::{decode_content_length, ping, PipeToSendStream, SendBuf};
|
||||||
use crate::body::HttpBody;
|
use crate::body::HttpBody;
|
||||||
use crate::common::{task, exec::Exec, Future, Never, Pin, Poll};
|
use crate::common::{exec::Exec, task, Future, Never, Pin, Poll};
|
||||||
use crate::headers;
|
use crate::headers;
|
||||||
use crate::proto::Dispatched;
|
use crate::proto::Dispatched;
|
||||||
use crate::{Body, Request, Response};
|
use crate::{Body, Request, Response};
|
||||||
@@ -44,6 +44,7 @@ pub(crate) struct Config {
|
|||||||
pub(crate) keep_alive_timeout: Duration,
|
pub(crate) keep_alive_timeout: Duration,
|
||||||
#[cfg(feature = "runtime")]
|
#[cfg(feature = "runtime")]
|
||||||
pub(crate) keep_alive_while_idle: bool,
|
pub(crate) keep_alive_while_idle: bool,
|
||||||
|
pub(crate) max_concurrent_reset_streams: Option<usize>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for Config {
|
impl Default for Config {
|
||||||
@@ -59,6 +60,7 @@ impl Default for Config {
|
|||||||
keep_alive_timeout: Duration::from_secs(20),
|
keep_alive_timeout: Duration::from_secs(20),
|
||||||
#[cfg(feature = "runtime")]
|
#[cfg(feature = "runtime")]
|
||||||
keep_alive_while_idle: false,
|
keep_alive_while_idle: false,
|
||||||
|
max_concurrent_reset_streams: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -70,6 +72,9 @@ fn new_builder(config: &Config) -> Builder {
|
|||||||
.initial_connection_window_size(config.initial_conn_window_size)
|
.initial_connection_window_size(config.initial_conn_window_size)
|
||||||
.max_frame_size(config.max_frame_size)
|
.max_frame_size(config.max_frame_size)
|
||||||
.enable_push(false);
|
.enable_push(false);
|
||||||
|
if let Some(max) = config.max_concurrent_reset_streams {
|
||||||
|
builder.max_concurrent_reset_streams(max);
|
||||||
|
}
|
||||||
builder
|
builder
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user