BrowserRealtimeClient class
Browser-only BloomRealtimeChannelClient backed by native browser WebSockets (package:web).
Implements resilient, multiplexed realtime communication for Bloom JS Native applications:
- Channel subscription multiplexing (multiple calls to subscribe share one underlying socket subscription).
- Automatic presence tracking with snapshots, joins, and leaves.
- Heartbeat ping/pong keep-alives (automatically replies to server pings with pong frames).
- Bounded exponential backoff reconnection with jitter on unexpected socket disconnects.
- Automatic channel and presence re-subscription upon reconnecting.
VM / SSR Safety
This class requires browser WebSocket APIs and must only be imported in client-side code
via package:bloom_js_native/browser.dart. Do not import in server-side rendering (SSR) code.
Example
final client = BrowserRealtimeClient(
uri: Uri.parse('wss://api.example.com/ws'),
);
final binding = BloomRealtimeBinding(client: client);
await client.connect();
final chatMessages = binding.channel('chat:general');
final activeUsers = binding.presence('chat:general', userInfo: {'name': 'Alice'});
- Implemented types
Constructors
-
BrowserRealtimeClient({required Uri uri, Duration initialReconnectDelay = defaultRealtimeInitialReconnectDelay, Duration maxReconnectDelay = defaultRealtimeMaxReconnectDelay, double backoffMultiplier = defaultRealtimeBackoffMultiplier, bool autoReconnect = true, Duration pingInterval = defaultRealtimePingInterval, List<
String> ? protocols}) -
Creates a BrowserRealtimeClient connecting to
uri.
Properties
- autoReconnect → bool
-
Whether to automatically reconnect when the connection drops unexpectedly.
final
- backoffMultiplier → double
-
Exponential backoff multiplier applied on each consecutive failed reconnection attempt.
final
- hashCode → int
-
The hash code for this object.
no setterinherited
- initialReconnectDelay → Duration
-
Initial reconnection delay before the first retry attempt.
final
- isConnected → bool
-
Whether the client is currently connected to the server.
no setter
- maxReconnectDelay → Duration
-
Maximum ceiling on reconnection delay.
final
-
onStateChanged
→ Stream<
RealtimeConnectionState> -
Broadcast stream that emits whenever state changes.
no setteroverride
- pingInterval → Duration
-
Interval at which heartbeat ping keep-alive messages are sent.
Set to Duration.zero to disable automatic client pings.
final
-
protocols
→ List<
String> ? -
Optional WebSocket sub-protocols to negotiate with the server.
final
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
- state → RealtimeConnectionState
-
The current connection state of the client.
no setteroverride
- uri → Uri
-
Target WebSocket server endpoint URI.
final
Methods
-
broadcast(
String channelName, Map< String, dynamic> payload) → void -
Broadcasts a
payloadmap tochannelName. -
connect(
) → Future< void> - Explicitly initiates connection to the WebSocket server.
-
dispose(
) → void -
Closes the socket, cancels reconnect and ping timers, closes all broadcast controllers,
and releases resources.
override
-
joinPresence(
String channelName, Map< String, dynamic> userInfo) → Stream<List< Map< >String, dynamic> > -
Joins presence in
channelNamepublishinguserInfometadata.override -
leavePresence(
String channelName) → void -
Leaves presence in
channelName, removing local presence state and sending a presence leave frame to the server. -
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
send(
RealtimeMessage message) → bool - Sends a raw RealtimeMessage envelope across the WebSocket connection.
-
subscribe(
String channelName) → Stream< Map< String, dynamic> > -
Subscribes to
channelNameand returns a broadcast stream of message payloads.override -
toString(
) → String -
A string representation of this object.
inherited
-
unsubscribe(
String channelName) → void -
Unsubscribes from
channelName, closing its local broadcast controller and sending an unsubscribe frame to the server if connected.override
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited