MasterController

WebSockets

Real-time controllers, the same MVC feel.

MasterController routes WebSocket events to socket controllers in app/sockets/, powered by Socket.IO. The client picks a controller via a handshake query; emitted event names map to methods on that controller.

Initialize sockets#

Call master.socket.init(server) after start():

server.js
await master.start(server);
await master.socket.init(server);   // socket.io is a peer dependency
server.listen(3001);

A socket controller#

app/sockets/chatSocket.js
export default class ChatSocket {
  // client: socket.emit('message', { text })  ->  this method
  async message(payload, socket, io) {
    io.emit('message', payload);            // broadcast to everyone
  }

  async typing(payload, socket, io) {
    socket.broadcast.emit('typing', payload); // everyone except sender
  }
}

Connecting from the client#

client
import { io } from 'socket.io-client';

// query.socket selects the controller (app/sockets/ChatSocket.js)
const socket = io('http://localhost:3001', { query: { socket: 'chat' } });

socket.emit('message', { text: 'By the power of Grayskull!' });
socket.on('message', (msg) => console.log(msg));
Tip
Generate a socket controller with master generate socket chat message typing. Action filters (callBeforeAction) work on socket controllers too, so you can authenticate connections.