Skip to main content

WebSockets

Introduction​

WebSockets are a powerful tool for enabling real-time communication between clients in your application. With Vania, implementing WebSockets is straightforward and efficient. By enabling WebSockets in your .env file, you can easily set up real-time communication channels.

In your project's Route directory, you'll find a web_socket.dart file where you can define WebSocket routes.

Quick Start​

To get started with WebSockets in Vania, define your WebSocket routes using the router method. You can define different routes for distinct WebSocket functionalities:

WebSocket Routes​

// Default WebSocket route
Router.websocket('/ws', (WebSocketEvent event) {
// Define your WebSocket events here
});

// WebSocket route for clients
Router.websocket('/clients', (WebSocketEvent event) {
// Define WebSocket events for clients here
});

// WebSocket route for admins
Router.websocket('/admins', (WebSocketEvent event) {
// Define WebSocket events for admins here
});

Within each route, you can define event listeners specific to the functionality of that route:

// Default WebSocket route
Router.websocket('/ws', (WebSocketEvent event) {
event.on('message', (WebSocketClient client, dynamic payload) {
// Handle user-typing event for default route
});

event.on('connect', (WebSocketClient client, dynamic payload) {
// Handle user connect
});

event.on('discconnect', (WebSocketClient client, dynamic payload) {
// Handle user disconnect
});
});

// WebSocket route for clients
Router.websocket('/clients', (WebSocketEvent event) {
event.on('client-joined', (WebSocketClient client, dynamic payload) {
// Handle client-joined event for clients route
});
});

// WebSocket route for admins
Router.websocket('/admins', (WebSocketEvent event) {
event.on('admin-message', (WebSocketClient client, dynamic payload) {
// Handle admin-payload event for admins route
});
});

This organization allows you to manage WebSocket events efficiently based on different routes and functionalities.

Within each route, you can define event listeners:

Router.websocket('/ws', (WebSocketEvent event) {
event.on('user-typing', (WebSocketClient client, dynamic payload) {
// Handle user-typing event
});
});
info

You can also create WebSocket controllers and pass data to controller methods.

Incoming data must adhere to the following JSON format:

{
"event": "message",
"payload": "client data"
}
info

The payload can be either a string or JSON format.

Client ID​

Each user connected to the WebSocket server is assigned a client ID (session ID). To retrieve the client ID, you can use client.clientId.

client.clientId

Responding to Clients​

You can respond to clients using various methods:

emit​

client.emit(String event, dynamic payload);

To respond to the sender.

toRoom​

client.toRoom(String event, String room, dynamic payload)

To emit to all users in a specific room.

to​

client.to(String clientId, String event, dynamic payload)

To emit to all clients connected to the WebSocket.

broadcast​

client.broadcast(String event, dynamic payload)

To broadcast to all connected sessions except the sender.

Room​

To allow users to join or leave a room, you can send the following events:

// To join a room
{
"event":"join-room",
"room":"unique room name or ID"
}

// To leave a room
{
"event":"left-room",
"room":"unique room name or ID"
}