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.