Bird
Raised Fist0
Denoframework~20 mins

WebSocket server and client in Deno - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
WebSocket Mastery in Deno
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
WebSocket Server Message Broadcast Behavior
Consider a Deno WebSocket server that accepts multiple clients. When one client sends a message, the server broadcasts it to all connected clients including the sender.

What will be the output on the clients if client A sends the message 'hello'?
Deno
import { serve } from "https://deno.land/std@0.177.0/http/server.ts";

const clients = new Set();

serve(async (req) => {
  if (req.headers.get("upgrade") !== "websocket") {
    return new Response("Not a websocket request", { status: 400 });
  }
  const { socket, response } = Deno.upgradeWebSocket(req);
  clients.add(socket);

  socket.onmessage = (e) => {
    for (const client of clients) {
      client.send(e.data);
    }
  };

  socket.onclose = () => {
    clients.delete(socket);
  };

  return response;
});
AAll clients including client A receive 'hello' message.
BOnly client A receives 'hello' message back.
CAll clients except client A receive 'hello' message.
DNo clients receive any message.
Attempts:
2 left
💡 Hint
The server sends the received message to every connected client in the set.
📝 Syntax
intermediate
1:30remaining
Correct WebSocket Client Connection Syntax in Deno
Which of the following code snippets correctly creates a WebSocket client connection to ws://localhost:8080 in Deno?
Aconst ws = new WebSocket('http://localhost:8080');
Bconst ws = new WebSocket('wss://localhost:8080');
Cconst ws = new WebSocket('ftp://localhost:8080');
Dconst ws = new WebSocket('ws://localhost:8080');
Attempts:
2 left
💡 Hint
WebSocket URLs start with ws:// for unencrypted connections.
❓ state_output
advanced
2:00remaining
WebSocket Client Message State After Receiving Multiple Messages
A Deno WebSocket client connects to a server and listens for messages. It stores all received messages in an array called 'messages'.

Given the code below, what is the value of 'messages' after receiving three messages: 'one', 'two', 'three'?
Deno
const messages = [];
const ws = new WebSocket('ws://localhost:8080');

ws.onmessage = (event) => {
  messages.push(event.data);
};
A['one', 'two', 'three']
B['three']
C[]
D['one', 'two']
Attempts:
2 left
💡 Hint
Each message triggers the onmessage event and appends to the array.
🔧 Debug
advanced
2:00remaining
Identify the Error in WebSocket Server Close Handling
A Deno WebSocket server tries to remove a client socket from the clients set when it closes. However, the client never gets removed.

What is the error in the following code snippet?
Deno
const clients = new Set();

socket.onclose = () => {
  clients.delete();
};
Aclients is not a Set, so delete method does not exist.
Bonclose event is not the right event to remove clients.
Cclients.delete() is called without specifying which socket to delete.
Dclients.delete() should be clients.remove().
Attempts:
2 left
💡 Hint
The delete method requires the item to remove as an argument.
🧠 Conceptual
expert
3:00remaining
WebSocket Server Handling Multiple Clients Concurrently
In a Deno WebSocket server, what is the best way to handle multiple clients sending messages at the same time to avoid race conditions when broadcasting messages?
AUse a global lock to block all clients except one at a time.
BUse a queue to serialize incoming messages and broadcast them one by one.
CClose all client connections and reopen them sequentially.
DBroadcast messages immediately without any synchronization.
Attempts:
2 left
💡 Hint
Think about how to keep message order consistent and avoid conflicts.

Practice

(1/5)
1. What is the main purpose of using WebSocket in a Deno application?
easy
A. To keep a live connection open for instant two-way communication
B. To send emails from the server
C. To serve static HTML files
D. To run background tasks without user interaction

Solution

  1. Step 1: Understand WebSocket functionality

    WebSocket allows a continuous open connection between client and server for real-time data exchange.
  2. Step 2: Compare with other options

    Sending emails, serving static files, or running background tasks are unrelated to WebSocket's purpose.
  3. Final Answer:

    To keep a live connection open for instant two-way communication -> Option A
  4. Quick Check:

    WebSocket = live two-way connection [OK]
Hint: WebSocket means live chat-like connection [OK]
Common Mistakes:
  • Confusing WebSocket with HTTP request-response
  • Thinking WebSocket sends emails
  • Assuming WebSocket serves files
2. Which of the following is the correct way to upgrade an HTTP request to a WebSocket connection in Deno?
easy
A. const { socket, response } = WebSocket.upgrade(request);
B. const socket = new WebSocket(request);
C. const ws = new WebSocketServer(request);
D. const { socket, response } = Deno.upgradeWebSocket(request);

Solution

  1. Step 1: Recall Deno WebSocket upgrade syntax

    Deno uses Deno.upgradeWebSocket(request) to upgrade HTTP requests to WebSocket connections.
  2. Step 2: Check other options for correctness

    Options B, C, and D use incorrect constructors or methods not available in Deno's standard library.
  3. Final Answer:

    const { socket, response } = Deno.upgradeWebSocket(request); -> Option D
  4. Quick Check:

    Deno.upgradeWebSocket() = correct upgrade method [OK]
Hint: Use Deno.upgradeWebSocket() to upgrade requests [OK]
Common Mistakes:
  • Using new WebSocket() on server side
  • Calling non-existent WebSocketServer constructor
  • Mixing client WebSocket API with server upgrade
3. Given this Deno WebSocket server snippet, what will the server send back when a client sends 'hello'?
const { socket, response } = Deno.upgradeWebSocket(request);
socket.onmessage = (e) => {
  socket.send(`Received: ${e.data}`);
};
medium
A. "hello"
B. "e.data"
C. "Received: hello"
D. No response sent

Solution

  1. Step 1: Analyze the onmessage handler

    When a message arrives, the server sends back a string with 'Received: ' plus the message content.
  2. Step 2: Substitute the client message

    Client sends 'hello', so server sends 'Received: hello'.
  3. Final Answer:

    "Received: hello" -> Option C
  4. Quick Check:

    Server echoes with prefix 'Received:' [OK]
Hint: Server sends back 'Received: ' plus client message [OK]
Common Mistakes:
  • Thinking server echoes raw message without prefix
  • Confusing e.data as string literal
  • Assuming no response is sent
4. What is wrong with this Deno WebSocket server code?
const { socket, response } = Deno.upgradeWebSocket(request);
socket.onmessage = (e) => {
  socket.send(e.data.toUpperCase());
};
return response;
medium
A. No error, code is correct
B. Not returning the response object
C. Missing await before Deno.upgradeWebSocket
D. Not handling socket.onopen event

Solution

  1. Step 1: Check upgradeWebSocket usage

    Deno.upgradeWebSocket is synchronous and returns socket and response correctly.
  2. Step 2: Verify response return and event handling

    The response is returned properly, and onopen event is optional, not required.
  3. Final Answer:

    No error, code is correct -> Option A
  4. Quick Check:

    Code follows correct WebSocket server pattern [OK]
Hint: upgradeWebSocket is synchronous; return response is required [OK]
Common Mistakes:
  • Adding unnecessary await to upgradeWebSocket
  • Forgetting to return response
  • Thinking onopen event is mandatory
5. You want to build a Deno WebSocket server that broadcasts any received message to all connected clients. Which approach correctly manages multiple clients?
hard
A. Use a single socket variable and overwrite it on each connection
B. Store all sockets in an array and loop to send messages to each socket
C. Create a new WebSocket server for each client connection
D. Send messages only to the last connected client

Solution

  1. Step 1: Understand broadcasting concept

    Broadcasting means sending a message to all connected clients, so all sockets must be stored.
  2. Step 2: Evaluate options for managing clients

    Store all sockets in an array and loop to send messages to each socket stores sockets in an array and loops to send messages, which is correct. Options A, B, and D do not support broadcasting properly.
  3. Final Answer:

    Store all sockets in an array and loop to send messages to each socket -> Option B
  4. Quick Check:

    Broadcast = send to all sockets stored [OK]
Hint: Keep all sockets in a list to broadcast messages [OK]
Common Mistakes:
  • Overwriting socket variable losing previous clients
  • Creating multiple servers instead of one
  • Sending messages only to one client
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