pub struct ServerBuilder<B = Identity, L = ()> { /* private fields */ }
Expand description

Builder to configure and create a JSON-RPC server

Implementations§

Create a default server builder.

Set the maximum size of a request body in bytes. Default is 10 MiB.

Set the maximum size of a response body in bytes. Default is 10 MiB.

Set the maximum number of connections allowed. Default is 100.

Enables or disables support of batch requests. By default, support is enabled.

Set the maximum number of connections allowed. Default is 1024.

Register a new resource kind. Errors if label is already registered, or if the number of registered resources on this server instance would exceed 8.

See the module documentation for resurce_limiting for details.

Add a logger to the builder Logger.

use std::{time::Instant, net::SocketAddr};

use jsonrpsee_server::logger::{Logger, HttpRequest, MethodKind, Params, TransportProtocol};
use jsonrpsee_server::ServerBuilder;

#[derive(Clone)]
struct MyLogger;

impl Logger for MyLogger {
    type Instant = Instant;

    fn on_connect(&self, remote_addr: SocketAddr, request: &HttpRequest, transport: TransportProtocol) {
         println!("[MyLogger::on_call] remote_addr: {:?}, headers: {:?}, transport: {}", remote_addr, request, transport);
    }

    fn on_request(&self, transport: TransportProtocol) -> Self::Instant {
         Instant::now()
    }

    fn on_call(&self, method_name: &str, params: Params, kind: MethodKind, transport: TransportProtocol) {
         println!("[MyLogger::on_call] method: '{}' params: {:?}, kind: {:?}, transport: {}", method_name, params, kind, transport);
    }

    fn on_result(&self, method_name: &str, success: bool, started_at: Self::Instant, transport: TransportProtocol) {
         println!("[MyLogger::on_result] '{}', worked? {}, time elapsed {:?}, transport: {}", method_name, success, started_at.elapsed(), transport);
    }

    fn on_response(&self, result: &str, started_at: Self::Instant, transport: TransportProtocol) {
         println!("[MyLogger::on_response] result: {}, time elapsed {:?}, transport: {}", result, started_at.elapsed(), transport);
    }

    fn on_disconnect(&self, remote_addr: SocketAddr, transport: TransportProtocol) {
         println!("[MyLogger::on_disconnect] remote_addr: {:?}, transport: {}", remote_addr, transport);
    }
}

let builder = ServerBuilder::new().set_logger(MyLogger);

Configure a custom tokio::runtime::Handle to run the server on.

Default: tokio::spawn

Configure the interval at which pings are submitted.

This option is used to keep the connection alive, and is just submitting Ping frames, without making any assumptions about when a Pong frame should be received.

Default: 60 seconds.

Examples
use std::time::Duration;
use jsonrpsee_server::ServerBuilder;

// Set the ping interval to 10 seconds.
let builder = ServerBuilder::default().ping_interval(Duration::from_secs(10));

Configure custom subscription ID provider for the server to use to when getting new subscription calls.

You may choose static dispatch or dynamic dispatch because IdProvider is implemented for Box<T>.

Default: RandomIntegerIdProvider.

Examples
use jsonrpsee_server::{ServerBuilder, RandomStringIdProvider, IdProvider};

// static dispatch
let builder1 = ServerBuilder::default().set_id_provider(RandomStringIdProvider::new(16));

// or dynamic dispatch
let builder2 = ServerBuilder::default().set_id_provider(Box::new(RandomStringIdProvider::new(16)));

Sets host filtering.

Configure a custom tower::ServiceBuilder middleware for composing layers to be applied to the RPC service.

Default: No tower layers are applied to the RPC service.

Examples

use std::time::Duration;
use std::net::SocketAddr;

#[tokio::main]
async fn main() {
    let builder = tower::ServiceBuilder::new().timeout(Duration::from_secs(2));

    let server = jsonrpsee_server::ServerBuilder::new()
        .set_middleware(builder)
        .build("127.0.0.1:0".parse::<SocketAddr>().unwrap())
        .await
        .unwrap();
}

Configure the server to only serve JSON-RPC HTTP requests.

Default: both http and ws are enabled.

Configure the server to only serve JSON-RPC WebSocket requests.

That implies that server just denies HTTP requests which isn’t a WebSocket upgrade request

Default: both http and ws are enabled.

Finalize the configuration of the server. Consumes the Builder.

#[tokio::main]
async fn main() {
  let listener = std::net::TcpListener::bind("127.0.0.1:0").unwrap();
  let occupied_addr = listener.local_addr().unwrap();
  let addrs: &[std::net::SocketAddr] = &[
      occupied_addr,
      "127.0.0.1:0".parse().unwrap(),
  ];
  assert!(jsonrpsee_server::ServerBuilder::default().build(occupied_addr).await.is_err());
  assert!(jsonrpsee_server::ServerBuilder::default().build(addrs).await.is_ok());
}

Finalizes the configuration of the server with customized TCP settings on the socket.

use jsonrpsee_server::ServerBuilder;
use socket2::{Domain, Socket, Type};
use std::time::Duration;

#[tokio::main]
async fn main() {
  let addr = "127.0.0.1:0".parse().unwrap();
  let domain = Domain::for_address(addr);
  let socket = Socket::new(domain, Type::STREAM, None).unwrap();
  socket.set_nonblocking(true).unwrap();

  let address = addr.into();
  socket.bind(&address).unwrap();

  socket.listen(4096).unwrap();

  let server = ServerBuilder::new().build_from_tcp(socket).unwrap();
}

Trait Implementations§

Formats the value using the given formatter. Read more
Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Instruments this type with the current Span, returning an Instrumented wrapper. Read more

Calls U::from(self).

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

Should always be Self
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more