WebSocket & Real-Time Architecture
Real-time communication using Socket.IO for live updates and notifications.
Overview
Gauzy uses Socket.IO for real-time features:
- Live time tracker status updates
- Instant notifications
- Real-time dashboard data
- Team activity feeds
Architecture
Gateway Setup
@WebSocketGateway({
cors: { origin: "*" },
namespace: "/ws",
})
export class NotificationGateway implements OnGatewayConnection {
@WebSocketServer()
server: Server;
handleConnection(client: Socket) {
const user = this.validateToken(client.handshake.auth.token);
client.join(`tenant:${user.tenantId}`);
}
@SubscribeMessage("start-timer")
handleStartTimer(client: Socket, data: any) {
this.server.to(`tenant:${data.tenantId}`).emit("timer-started", data);
}
}
Events
| Event | Direction | Description |
|---|---|---|
timer-started | Server → Client | Employee started timer |
timer-stopped | Server → Client | Employee stopped timer |
screenshot-taken | Server → Client | New screenshot available |
notification | Server → Client | New notification |
task-updated | Server → Client | Task status changed |
Redis Adapter (Multi-Instance)
For multi-server deployments, WebSocket events are broadcast through Redis:
import { createAdapter } from "@socket.io/redis-adapter";
const pubClient = new Redis(config.redis);
const subClient = pubClient.duplicate();
server.adapter(createAdapter(pubClient, subClient));