Build powerful real-time applications using the declarative Gateway pattern. Fully integrated with Dependency Injection.
Use decorators to define WebSocket endpoints similar to Controllers.
Gateways are providers! Inject services directly into your real-time logic.
Built-in adapters for room-management and broadcasting.
Automatically generates documentation for your events.
Unlike traditional event listeners, Gateways allow you to organize your real-time logic into classes using decorators.
1import { WebSocketGateway, SubscribeMessage, MessageBody, ConnectedSocket } from 'canxjs';23@WebSocketGateway({4path: '/ws',5cors: { origin: '*' }6})7export class ChatGateway {89// Handle 'chat:message' event10@SubscribeMessage('chat:message')11handleMessage(12@MessageBody() data: { text: string },13@ConnectedSocket() client: any14) {15console.log(`Received message from ${client.id}: ${data.text}`);1617// Return explicit response (emits 'chat:message' back to sender)18return { event: 'ack', status: 'received' };19}2021@SubscribeMessage('join:room')22handleJoinRoom(23@MessageBody() room: string,24@ConnectedSocket() client: any25) {26client.join(room);27// Broadcast to room (auto-injected server/client methods)28client.to(room).emit('user:joined', { id: client.id });29}30}
Gateways are fully managed by the CanxJS IoC container. You can inject any service, repository, or provider.
1import { WebSocketGateway, SubscribeMessage } from 'canxjs';2import { AuthService } from './AuthService';34@WebSocketGateway()5export class AuthGateway {6// Full Dependency Injection Support7constructor(private authService: AuthService) {}89@SubscribeMessage('login')10async handleLogin(@MessageBody() token: string, @ConnectedSocket() client: any) {11const user = await this.authService.validate(token);12client.data.user = user;13return { status: 'authenticated', user };14}15}
1// Native WebSocket Client or CanxJS Client2const ws = new WebSocket("ws://localhost:3000/ws");34ws.onopen = () => {5// Standard JSON event format6ws.send(JSON.stringify({7event: "chat:message",8data: { text: "Hello World!" }9}));10};1112ws.onmessage = (msg) => {13const { event, data } = JSON.parse(msg.data);14console.log(event, data);15};