Struct ProtosocketServer

Source
pub struct ProtosocketServer<Connector: ServerConnector> { /* private fields */ }
Expand description

A protosocket::Connection is an IO driver. It directly uses tokio’s io wrapper of mio to poll the OS’s io primitives, manages read and write buffers, and vends messages to & from connections. Connections send messages to the ConnectionServer through an mpsc channel, and they receive inbound messages via a reactor callback.

Protosockets are monomorphic messages: You can only have 1 kind of message per service. The expected way to work with this is to use prost and protocol buffers to encode messages. Of course you can do whatever you want, as the telnet example shows.

Protosocket messages are not opinionated about request & reply. If you are, you will need to implement such a thing. This allows you freely choose whether you want to send fire-&-forget messages sometimes; however it requires you to write your protocol’s rules. You get an inbound iterable of batches and an outbound stream of per connection - you decide what those mean for you!

A ProtosocketServer is a future: You spawn it and it runs forever.

Implementations§

Source§

impl<Connector: ServerConnector> ProtosocketServer<Connector>

Source

pub async fn new( address: SocketAddr, runtime: Handle, connector: Connector, ) -> Result<Self>

Construct a new ProtosocketServer listening on the provided address. The address will be bound and listened upon with SO_REUSEADDR set. The server will use the provided runtime to spawn new tcp connections as protosocket::Connections.

Source

pub fn set_max_buffer_length(&mut self, max_buffer_length: usize)

Set the maximum buffer length for connections created by this server after the setting is applied.

Source

pub fn set_max_queued_outbound_messages( &mut self, max_queued_outbound_messages: usize, )

Set the maximum queued outbound messages for connections created by this server after the setting is applied.

Trait Implementations§

Source§

impl<Connector: ServerConnector> Future for ProtosocketServer<Connector>

Source§

type Output = Result<(), Error>

The type of value produced on completion.
Source§

fn poll(self: Pin<&mut Self>, context: &mut Context<'_>) -> Poll<Self::Output>

Attempts to resolve the future to a final value, registering the current task for wakeup if the value is not yet available. Read more

Auto Trait Implementations§

§

impl<Connector> !Freeze for ProtosocketServer<Connector>

§

impl<Connector> RefUnwindSafe for ProtosocketServer<Connector>
where Connector: RefUnwindSafe,

§

impl<Connector> Send for ProtosocketServer<Connector>
where Connector: Send,

§

impl<Connector> Sync for ProtosocketServer<Connector>
where Connector: Sync,

§

impl<Connector> Unpin for ProtosocketServer<Connector>

§

impl<Connector> UnwindSafe for ProtosocketServer<Connector>
where Connector: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<F> IntoFuture for F
where F: Future,

Source§

type Output = <F as Future>::Output

The output that the future will produce on completion.
Source§

type IntoFuture = F

Which kind of future are we turning this into?
Source§

fn into_future(self) -> <F as IntoFuture>::IntoFuture

Creates a future from a value. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.