Struct FastCgiServer
pub struct FastCgiServer<S> { /* private fields */ }fastcgi only.Expand description
FastCGI server that accepts connections and dispatches requests to an inner service.
The inner service S must implement Service<FastCgiRequest> with
Output = FastCgiResponse. Each accepted connection is handled synchronously:
one request per connection at a time (multiplexed requests are not supported).
A second concurrent FCGI_BEGIN_REQUEST is replied to with
FCGI_END_REQUEST{CantMpxConn} (see ServerOptions::respond_cant_mpx_conn).
All three FastCGI roles are dispatched to the inner service:
Role::Responder, Role::Authorizer, and Role::Filter.
The service inspects req.role to handle each case appropriately.
Implementations§
§impl<S> FastCgiServer<S>
impl<S> FastCgiServer<S>
pub fn new(inner: S) -> FastCgiServer<S>
pub fn new(inner: S) -> FastCgiServer<S>
Create a new FastCgiServer wrapping the given inner service.
pub fn with_options(self, options: ServerOptions) -> FastCgiServer<S>
pub fn with_options(self, options: ServerOptions) -> FastCgiServer<S>
Replace the ServerOptions used for parsing connections.
pub fn options(&self) -> &ServerOptions
pub fn options(&self) -> &ServerOptions
Get a reference to the current ServerOptions.
pub fn into_inner(self) -> S
pub fn into_inner(self) -> S
Consumes self, returning the underlying service.
§impl<S> FastCgiServer<S>
impl<S> FastCgiServer<S>
pub async fn serve_connection<IO>(&self, stream: IO) -> Result<(), Error>where
IO: AsyncRead + AsyncWrite + Unpin + Send + 'static,
S: Service<FastCgiRequest, Output = FastCgiResponse>,
<S as Service<FastCgiRequest>>::Error: Into<Box<dyn Error + Send + Sync>>,
pub async fn serve_connection<IO>(&self, stream: IO) -> Result<(), Error>where
IO: AsyncRead + AsyncWrite + Unpin + Send + 'static,
S: Service<FastCgiRequest, Output = FastCgiResponse>,
<S as Service<FastCgiRequest>>::Error: Into<Box<dyn Error + Send + Sync>>,
Handle a single FastCGI connection.
The IO stream is split into independent read and write halves so that the
inner service can stream the request body while the response is written
concurrently. A background task reads FCGI_STDIN (and FCGI_DATA for
Filter requests) records and forwards them to the service via an in-memory
channel. If the web server sends FCGI_ABORT_REQUEST the body stream
signals an io::ErrorKind::ConnectionAborted error to the service and the
connection is closed after the response is written.
Trait Implementations§
§impl<S> Clone for FastCgiServer<S>where
S: Clone,
impl<S> Clone for FastCgiServer<S>where
S: Clone,
§fn clone(&self) -> FastCgiServer<S>
fn clone(&self) -> FastCgiServer<S>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more§impl<S> Debug for FastCgiServer<S>where
S: Debug,
impl<S> Debug for FastCgiServer<S>where
S: Debug,
§impl<S, IO> Service<IO> for FastCgiServer<S>where
S: Service<FastCgiRequest, Output = FastCgiResponse>,
<S as Service<FastCgiRequest>>::Error: Into<Box<dyn Error + Send + Sync>>,
IO: Io + Unpin + Send + 'static,
impl<S, IO> Service<IO> for FastCgiServer<S>where
S: Service<FastCgiRequest, Output = FastCgiResponse>,
<S as Service<FastCgiRequest>>::Error: Into<Box<dyn Error + Send + Sync>>,
IO: Io + Unpin + Send + 'static,
§async fn serve(
&self,
stream: IO,
) -> Result<<FastCgiServer<S> as Service<IO>>::Output, <FastCgiServer<S> as Service<IO>>::Error>
async fn serve( &self, stream: IO, ) -> Result<<FastCgiServer<S> as Service<IO>>::Output, <FastCgiServer<S> as Service<IO>>::Error>
§fn boxed(self) -> BoxService<Input, Self::Output, Self::Error>
fn boxed(self) -> BoxService<Input, Self::Output, Self::Error>
Auto Trait Implementations§
impl<S> Freeze for FastCgiServer<S>where
S: Freeze,
impl<S> RefUnwindSafe for FastCgiServer<S>where
S: RefUnwindSafe,
impl<S> Send for FastCgiServer<S>where
S: Send,
impl<S> Sync for FastCgiServer<S>where
S: Sync,
impl<S> Unpin for FastCgiServer<S>where
S: Unpin,
impl<S> UnsafeUnpin for FastCgiServer<S>where
S: UnsafeUnpin,
impl<S> UnwindSafe for FastCgiServer<S>where
S: UnwindSafe,
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a rama_grpc::Request§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§fn and<P, B, E>(self, other: P) -> And<T, P>
fn and<P, B, E>(self, other: P) -> And<T, P>
Policy that returns Action::Follow only if self and other return
Action::Follow. Read more§impl<T, U> RamaTryFrom<T> for Uwhere
U: TryFrom<T>,
impl<T, U> RamaTryFrom<T> for Uwhere
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
fn rama_try_from(value: T) -> Result<U, <U as RamaTryFrom<T>>::Error>
§impl<T, U, CrateMarker> RamaTryInto<U, CrateMarker> for Twhere
U: RamaTryFrom<T, CrateMarker>,
impl<T, U, CrateMarker> RamaTryInto<U, CrateMarker> for Twhere
U: RamaTryFrom<T, CrateMarker>,
type Error = <U as RamaTryFrom<T, CrateMarker>>::Error
fn rama_try_into(self) -> Result<U, <U as RamaTryFrom<T, CrateMarker>>::Error>
§impl<V, F> ValueFormatter<&V> for F
impl<V, F> ValueFormatter<&V> for F
§fn format_value(writer: impl ValueWriter, value: &&V)
fn format_value(writer: impl ValueWriter, value: &&V)
value to writer§impl<V, F> ValueFormatter<Arc<V>> for F
impl<V, F> ValueFormatter<Arc<V>> for F
§fn format_value(writer: impl ValueWriter, value: &Arc<V>)
fn format_value(writer: impl ValueWriter, value: &Arc<V>)
value to writer§impl<V, F> ValueFormatter<Box<V>> for F
impl<V, F> ValueFormatter<Box<V>> for F
§fn format_value(writer: impl ValueWriter, value: &Box<V>)
fn format_value(writer: impl ValueWriter, value: &Box<V>)
value to writer§impl<V, F> ValueFormatter<Cow<'_, V>> for F
impl<V, F> ValueFormatter<Cow<'_, V>> for F
§fn format_value(writer: impl ValueWriter, value: &Cow<'_, V>)
fn format_value(writer: impl ValueWriter, value: &Cow<'_, V>)
value to writer§impl<V, F> ValueFormatter<Option<V>> for Fwhere
F: ValueFormatter<V> + ?Sized,
impl<V, F> ValueFormatter<Option<V>> for Fwhere
F: ValueFormatter<V> + ?Sized,
§fn format_value(writer: impl ValueWriter, value: &Option<V>)
fn format_value(writer: impl ValueWriter, value: &Option<V>)
value to writer