Bird
Raised Fist0
Expressframework~5 mins

Emitting and receiving messages in Express

Choose your learning style10 modes available
Introduction

Emitting and receiving messages lets your server and clients talk to each other in real time. This helps build interactive apps like chat or live updates.

You want to send a chat message from one user to others instantly.
You need to update a dashboard live when data changes on the server.
You want to notify users immediately when a new event happens.
You want to build a multiplayer game where players see moves live.
You want to sync data between multiple clients without refreshing.
Syntax
Express
socket.emit(eventName, data)
socket.on(eventName, callback)

socket.emit sends a message with a name and data.

socket.on listens for messages with that name.

Examples
Sends a chat message to the server or other clients.
Express
socket.emit('chat message', 'Hello everyone!')
Listens for chat messages and logs them when received.
Express
socket.on('chat message', (msg) => {
  console.log('New message:', msg)
})
Sample Program

This Express server uses Socket.IO to handle real-time chat messages. When a client sends a 'chat message', the server logs it and sends it to all connected clients.

Express
import express from 'express'
import http from 'http'
import { Server } from 'socket.io'

const app = express()
const server = http.createServer(app)
const io = new Server(server)

app.get('/', (req, res) => {
  res.sendFile(new URL('index.html', import.meta.url).pathname)
})

io.on('connection', (socket) => {
  console.log('A user connected')

  socket.on('chat message', (msg) => {
    console.log('Message received:', msg)
    io.emit('chat message', msg) // send to all clients
  })

  socket.on('disconnect', () => {
    console.log('User disconnected')
  })
})

server.listen(3000, () => {
  console.log('Server listening on http://localhost:3000')
})
OutputSuccess
Important Notes

Make sure to include the Socket.IO client script in your HTML to connect and send/receive messages.

Use unique event names to avoid confusion between different message types.

Remember to handle client disconnects to keep your app stable.

Summary

Emitting sends messages; receiving listens for them.

This helps build live, interactive apps with Express and Socket.IO.

Use clear event names and handle connections carefully.

Practice

(1/5)
1. In Express with Socket.IO, what does emitting a message mean?
easy
A. Starting the server
B. Listening for incoming messages
C. Closing the connection
D. Sending a message to connected clients

Solution

  1. Step 1: Understand the meaning of emitting

    Emitting means sending a message or event from the server to clients or vice versa.
  2. Step 2: Differentiate emitting from receiving

    Receiving means listening for messages, not sending them.
  3. Final Answer:

    Sending a message to connected clients -> Option D
  4. Quick Check:

    Emitting = Sending message [OK]
Hint: Emitting means sending messages out [OK]
Common Mistakes:
  • Confusing emitting with receiving
  • Thinking emitting closes connections
  • Mixing emitting with server start
2. Which of the following is the correct syntax to emit a message named 'chat message' with data 'Hello' to all clients using Socket.IO in Express?
easy
A. io.send('chat message', 'Hello');
B. io.emit('chat message', 'Hello');
C. socket.emit('chat message');
D. io.on('chat message', 'Hello');

Solution

  1. Step 1: Identify the method to send to all clients

    The io.emit method sends a message to all connected clients.
  2. Step 2: Check the syntax correctness

    io.emit('chat message', 'Hello'); correctly emits the event with data.
  3. Final Answer:

    io.emit('chat message', 'Hello'); -> Option B
  4. Quick Check:

    Use io.emit to broadcast [OK]
Hint: Use io.emit(event, data) to send to all clients [OK]
Common Mistakes:
  • Using io.on instead of io.emit
  • Omitting the data argument
  • Using socket.emit to broadcast to all clients
3. Given this server code snippet in Express with Socket.IO:
io.on('connection', (socket) => {
  socket.on('greet', (msg) => {
    socket.emit('reply', `Hello, ${msg}`);
  });
});

What will the client receive if it emits 'greet' with message 'Alice'?
medium
A. A 'reply' event with message 'Hello, Alice'
B. No message received
C. A 'greet' event with message 'Hello, Alice'
D. An error because of missing broadcast

Solution

  1. Step 1: Understand the event flow

    The server listens for 'greet' from the client, then emits 'reply' back to the same client.
  2. Step 2: Check the emitted message content

    The message sent is `Hello, ${msg}`, so with 'Alice' it becomes 'Hello, Alice'.
  3. Final Answer:

    A 'reply' event with message 'Hello, Alice' -> Option A
  4. Quick Check:

    Reply event sends greeting with name [OK]
Hint: Server emits reply event with personalized message [OK]
Common Mistakes:
  • Expecting broadcast to all clients
  • Confusing event names 'greet' and 'reply'
  • Thinking no message is sent back
4. What is wrong with this Express Socket.IO server code snippet?
io.on('connection', (socket) => {
  socket.emit('welcome', 'Hello client');
  socket.on('message', (msg) => {
    io.emit('message', msg);
  });
  socket.on('disconnect', () => {
    socket.emit('goodbye', 'Bye');
  });
});
medium
A. Missing callback for 'welcome' event
B. Using io.emit inside 'message' handler is invalid
C. Emitting 'goodbye' after disconnect causes error
D. No error, code is correct

Solution

  1. Step 1: Analyze the 'disconnect' event usage

    When a client disconnects, the socket is closed and cannot emit messages.
  2. Step 2: Identify the error

    Trying to emit 'goodbye' after disconnect causes an error because socket is no longer connected.
  3. Final Answer:

    Emitting 'goodbye' after disconnect causes error -> Option C
  4. Quick Check:

    Cannot emit after disconnect [OK]
Hint: Don't emit messages after disconnect event [OK]
Common Mistakes:
  • Thinking io.emit is invalid inside handlers
  • Expecting callback needed for emit
  • Assuming no error on emitting after disconnect
5. You want to send a private message from one client to another using Express and Socket.IO. Which approach correctly emits a message only to the target client identified by targetId?
hard
A. io.to(targetId).emit('private message', msg);
B. io.emit('private message', { to: targetId, text: msg });
C. socket.broadcast.emit('private message', { to: targetId, text: msg });
D. socket.emit('private message', msg);

Solution

  1. Step 1: Understand how to target a specific client

    Socket.IO uses io.to(socketId).emit() to send messages to a specific client.
  2. Step 2: Evaluate each option

    io.to(targetId).emit('private message', msg); correctly uses io.to(targetId).emit() to send only to the client with targetId.
  3. Final Answer:

    io.to(targetId).emit('private message', msg); -> Option A
  4. Quick Check:

    Use io.to(socketId).emit for private messages [OK]
Hint: Use io.to(targetId).emit for private messages [OK]
Common Mistakes:
  • Using io.emit broadcasts to all clients
  • socket.broadcast.emit sends to all except sender
  • socket.emit sends only to sender, not target
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard