RealtimeClient

Struct RealtimeClient 

Source
pub struct RealtimeClient { /* private fields */ }
Expand description

The main entry point for interacting with Supabase Realtime.

RealtimeClient manages the WebSocket connection to Supabase Realtime servers, handles automatic reconnection with exponential backoff, and provides channel creation for real-time subscriptions.

§Example

use supabase_realtime_rs::{RealtimeClient, RealtimeClientOptions};

let client = RealtimeClient::new(
    "wss://your-project.supabase.co/realtime/v1",
    RealtimeClientOptions {
        api_key: "your-anon-key".to_string(),
        ..Default::default()
    }
)?;

client.connect().await?;
// Use the client...
client.disconnect().await?;

Implementations§

Source§

impl RealtimeClient

Source

pub fn new( endpoint: impl Into<String>, options: RealtimeClientOptions, ) -> Result<Self>

Creates a new RealtimeClient instance.

This initializes the client but does not establish a connection. You must call connect() to establish the WebSocket connection.

§Arguments
  • endpoint - The WebSocket endpoint URL (e.g., wss://your-project.supabase.co/realtime/v1)
  • options - Configuration options including API key and optional settings
§Returns

Returns Ok(RealtimeClient) if the endpoint is valid, or an error if the URL is malformed.

§Errors

Returns RealtimeError::UrlParse if the endpoint URL cannot be parsed.

§Example
use supabase_realtime_rs::{RealtimeClient, RealtimeClientOptions};

let client = RealtimeClient::new(
    "wss://your-project.supabase.co/realtime/v1",
    RealtimeClientOptions {
        api_key: "your-anon-key".to_string(),
        ..Default::default()
    }
)?;
Source

pub async fn resubscribe_all_channels(&self) -> Result<()>

Source

pub async fn try_reconnect(&self) -> Result<()>

Source

pub async fn connect(&self) -> Result<()>

Establishes a WebSocket connection to the Supabase Realtime server.

This method opens the WebSocket connection, starts the heartbeat mechanism, and spawns background tasks for reading messages and maintaining the connection. If already connected, this method returns immediately without error.

After connecting successfully, the client will automatically:

  • Send periodic heartbeat messages
  • Attempt reconnection if the connection drops (unless manually disconnected)
  • Route incoming messages to subscribed channels
§Errors

Returns an error if:

  • The WebSocket handshake fails
  • The endpoint URL is invalid
  • TLS/SSL negotiation fails
§Example
use supabase_realtime_rs::{RealtimeClient, RealtimeClientOptions};

let client = RealtimeClient::new(
    "wss://your-project.supabase.co/realtime/v1",
    RealtimeClientOptions {
        api_key: "your-anon-key".to_string(),
        ..Default::default()
    }
)?;

// Establish connection
client.connect().await?;

// Now you can create channels and subscribe
Source

pub async fn channel( &self, topic: &str, options: RealtimeChannelOptions, ) -> Arc<RealtimeChannel>

Creates or retrieves a channel for real-time subscriptions.

Channels are the primary way to subscribe to real-time events. Each channel is identified by a unique topic string. If a channel with the given topic already exists, this method returns the existing channel instead of creating a new one.

§Arguments
  • topic - The channel topic (e.g., “room:lobby”, “public:todos”). The “realtime:” prefix is automatically added.
  • options - Configuration options for the channel (broadcast settings, presence key, etc.)
§Returns

Returns an Arc<RealtimeChannel> that can be used to subscribe to events, send broadcasts, and track presence.

§Example
use supabase_realtime_rs::{RealtimeClient, RealtimeClientOptions, RealtimeChannelOptions};

// Create a channel
let channel = client.channel("room:lobby", Default::default()).await;

// Subscribe to receive events
channel.subscribe().await?;
Source

pub async fn disconnect(&self) -> Result<()>

Gracefully disconnects from the WebSocket server.

This method closes the WebSocket connection, aborts all background tasks (heartbeat, message reading), and marks the disconnect as manual. When disconnected manually, the client will NOT attempt automatic reconnection.

To reconnect after a manual disconnect, call connect() again.

§Errors

Returns an error if the WebSocket close handshake fails (rare).

§Example
use supabase_realtime_rs::{RealtimeClient, RealtimeClientOptions};

// When done, disconnect gracefully
client.disconnect().await?;
Source

pub async fn is_connected(&self) -> bool

Checks whether the client is currently connected to the server.

§Returns

Returns true if the WebSocket connection is open, false otherwise.

§Example
use supabase_realtime_rs::{RealtimeClient, RealtimeClientOptions};

if !client.is_connected().await {
    client.connect().await?;
}
Source

pub async fn make_ref(&self) -> String

Generate next message reference

Source

pub async fn push(&self, message: RealtimeMessage) -> Result<()>

Push a message to the server

Source

pub fn http_endpoint(&self) -> String

Get HTTP endpoint URL (for broadcasts)

Source

pub fn api_key(&self) -> &str

Get API key

Source

pub fn access_token(&self) -> Option<&str>

Get access token

Trait Implementations§

Source§

impl Clone for RealtimeClient

Source§

fn clone(&self) -> RealtimeClient

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

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

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. 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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,