Bird
Raised Fist0
Node.jsframework~5 mins

WebSocket protocol concept in Node.js

Choose your learning style10 modes available
Introduction

WebSocket lets your app talk to a server in real-time. It keeps the connection open so messages can flow back and forth instantly.

You want a chat app where messages appear instantly.
You need live updates like sports scores or stock prices.
You build a multiplayer game that needs fast communication.
You want to show notifications without refreshing the page.
Syntax
Node.js
const ws = new WebSocket('ws://example.com/socket');

ws.onopen = () => {
  ws.send('Hello Server!');
};

ws.onmessage = (event) => {
  console.log('Message from server:', event.data);
};

ws.onclose = () => {
  console.log('Connection closed');
};

Use ws:// for unencrypted and wss:// for secure connections.

Events like onopen, onmessage, and onclose handle connection states.

Examples
Connect securely using wss:// and send a message when connected.
Node.js
const ws = new WebSocket('wss://example.com/socket');

ws.onopen = () => {
  ws.send('Hi!');
};
Listen for messages from the server and log them.
Node.js
ws.onmessage = (event) => {
  console.log(`Received: ${event.data}`);
};
Detect when the connection closes and log it.
Node.js
ws.onclose = () => {
  console.log('Socket closed');
};
Sample Program

This Node.js program creates a WebSocket server on port 8080. When a client connects, it logs a message. It listens for messages from the client, logs them, and sends back the same message prefixed with 'Echo:'. It also logs when the client disconnects.

Node.js
import WebSocket from 'ws';

const server = new WebSocket.Server({ port: 8080 });

server.on('connection', (socket) => {
  console.log('Client connected');

  socket.on('message', (message) => {
    console.log('Received:', message.toString());
    socket.send(`Echo: ${message}`);
  });

  socket.on('close', () => {
    console.log('Client disconnected');
  });
});

console.log('WebSocket server running on ws://localhost:8080');
OutputSuccess
Important Notes

WebSocket keeps the connection open, unlike HTTP which closes after each request.

Use secure WebSocket (wss://) for sensitive data to protect privacy.

WebSocket works well for apps needing instant updates without refreshing.

Summary

WebSocket creates a live, two-way connection between client and server.

It is great for real-time apps like chat, games, and live feeds.

Use event handlers to send and receive messages easily.

Practice

(1/5)
1. What is the main purpose of the WebSocket protocol in Node.js applications?
easy
A. To send HTTP requests from client to server
B. To create a live, two-way communication channel between client and server
C. To serve static files like HTML and CSS
D. To store data permanently on the server

Solution

  1. Step 1: Understand WebSocket communication

    WebSocket allows a persistent connection where both client and server can send messages anytime.
  2. Step 2: Compare with other options

    HTTP requests are one-way and short-lived, static files serving and data storage are unrelated to WebSocket's main role.
  3. Final Answer:

    To create a live, two-way communication channel between client and server -> Option B
  4. Quick Check:

    WebSocket = two-way live connection [OK]
Hint: WebSocket means live two-way chat between client and server [OK]
Common Mistakes:
  • Confusing WebSocket with HTTP request-response
  • Thinking WebSocket serves static files
  • Assuming WebSocket stores data permanently
2. Which of the following is the correct way to create a WebSocket server using the 'ws' library in Node.js?
easy
A. const ws = new WebSocket(8080);
B. const ws = WebSocket.createServer(8080);
C. const ws = new WebSocket.Server({ port: 8080 });
D. const ws = WebSocket.listen(8080);

Solution

  1. Step 1: Recall 'ws' library syntax

    The 'ws' library creates a server with new WebSocket.Server and a config object with port.
  2. Step 2: Check each option

    Only const ws = new WebSocket.Server({ port: 8080 }); uses correct constructor and port option. Others use invalid methods or constructors.
  3. Final Answer:

    const ws = new WebSocket.Server({ port: 8080 }); -> Option C
  4. Quick Check:

    WebSocket.Server + port config = correct [OK]
Hint: Use new WebSocket.Server({ port }) to create server [OK]
Common Mistakes:
  • Using WebSocket constructor instead of WebSocket.Server
  • Calling non-existent methods like createServer or listen
  • Passing port as a direct argument instead of in an object
3. Given this Node.js WebSocket server code snippet, what will be logged when a client sends the message 'hello'?
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', ws => {
  ws.on('message', message => {
    console.log(`Received: ${message}`);
    ws.send('pong');
  });
});
medium
A. Received: hello
B. pong
C. Received: pong
D. hello

Solution

  1. Step 1: Analyze message event handler

    When the server receives a message, it logs 'Received: ' plus the message content.
  2. Step 2: Identify logged output

    Client sends 'hello', so console logs 'Received: hello'. The server sends back 'pong' but that is not logged.
  3. Final Answer:

    Received: hello -> Option A
  4. Quick Check:

    Server logs received message text [OK]
Hint: Server logs 'Received: message' on message event [OK]
Common Mistakes:
  • Confusing sent message with logged message
  • Thinking server logs the reply it sends
  • Mixing up client and server console outputs
4. Identify the error in this WebSocket server code snippet:
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', ws => {
  ws.on('message', (msg) => {
    ws.send(msg.toUpperCase);
  });
});
medium
A. The port number must be a string, not a number
B. WebSocket.Server should be WebSocket.createServer
C. The 'message' event handler should be 'onMessage'
D. msg.toUpperCase should be called as a function: msg.toUpperCase()

Solution

  1. Step 1: Check usage of toUpperCase

    toUpperCase is a function and must be called with parentheses to get the uppercase string.
  2. Step 2: Verify other parts

    WebSocket.Server is correct, 'message' event is correct, port can be a number.
  3. Final Answer:

    msg.toUpperCase should be called as a function: msg.toUpperCase() -> Option D
  4. Quick Check:

    Call string methods with () [OK]
Hint: String methods need () to execute, not just reference [OK]
Common Mistakes:
  • Forgetting parentheses on string methods
  • Using wrong event names like 'onMessage'
  • Confusing WebSocket server creation syntax
5. You want to build a Node.js WebSocket server that broadcasts any message received from one client to all connected clients except the sender. Which code snippet correctly implements this behavior?
hard
A. wss.on('connection', ws => { ws.on('message', message => { wss.clients.forEach(client => { if (client !== ws && client.readyState === WebSocket.OPEN) { client.send(message); } }); }); });
B. wss.on('connection', ws => { ws.on('message', message => { ws.send(message); }); });
C. wss.on('connection', ws => { ws.on('message', message => { wss.send(message); }); });
D. wss.on('message', message => { wss.clients.forEach(client => client.send(message)); });

Solution

  1. Step 1: Understand broadcasting logic

    Broadcast means sending message to all clients except the sender, checking if client connection is open.
  2. Step 2: Analyze each option

    wss.on('connection', ws => { ws.on('message', message => { wss.clients.forEach(client => { if (client !== ws && client.readyState === WebSocket.OPEN) { client.send(message); } }); }); }); loops over all clients, skips sender, checks readyState, and sends message correctly. Others either send only to sender, call invalid methods, or listen on wrong event.
  3. Final Answer:

    Option A code snippet correctly broadcasts to all except sender -> Option A
  4. Quick Check:

    Broadcast = send to all except sender with readyState check [OK]
Hint: Use wss.clients.forEach and skip sender to broadcast [OK]
Common Mistakes:
  • Sending message only back to sender
  • Calling send on wss object instead of clients
  • Not checking client.readyState before sending
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